node.js - Nodejs+express 应用程序 API 的正确模块化结构

标签 node.js api express routes express-4

我正在尝试使用 Express 4 为 API 制作 Nodejs 应用程序。但是当我使应用程序更加模块化时,我的路线不起作用。谁能解释一下我的错误是什么以及 API 应用程序的正确结构应该是什么?

我的app.js文件(删除了一些不必要的代码):

var app = express();
var v1 = require('./routes/v1/index');

app.use('/api/v1', v1);
app.use('/api/v2', function(req, res, next) {
    console.log('API Version 2');
    next();
});

app.use('/api', function(req, res, next) {
    console.log('Request of API versions');
    next();
});

我的routes/v1/index.js 文件:

var express = require('express');
var router = express.Router();

var user = require('./user');
module.exports = router;

我的routes/v1/user.js 文件:

var express = require('express');
var router = express.Router();

router.route('/')
    .get(function(req, res, next) {
        console.log('USERS GET');
    })
    .post(function(req, res, next) {
        console.log('USERS POST');
    })
    .put(function(req, res, next) {
        console.log('USERS PUT');
    })
    .delete(function(req, res, next) {
        console.log('USERS DELETE');
    });

router.use(function(req, res, next) {
    console.log('USERS last Middleware');
});
module.exports = router;

当我尝试请求这样的网址时:http://localhost:3000/api/v1/user

我仅在控制台中看到消息:“请求 API 版本” - 因此在 index.js 或 user.js 中没有触发任何代码,

但是如果我删除 user.js 并将请求处理放到索引 js 中(本例中 user.js 中的 router.route('...') 位于 index.js 中) - 一切正常,我会看到消息取决于 VERB 并且没有“请求 API 版本”消息。

所以我的问题是:为什么会发生这种情况?为什么 user.js 不包含在内,并且如果我从 index.js 连接它就不起作用,在这种情况下我将如何制作模块化应用程序?将所有处理放在 index.js 中 - 不好,因为我需要/user、/news、/comment 等处理,我想这些处理将在单独的文件中处理。

最佳答案

您的routes/v1/index.js 文件正在导出一个没有添加任何路由/中间件的路由器。

在你的routes/v1/index.js文件中,你可以尝试module.exports = user;

您是否考虑过将routes/v1/user.js内的路由移动到routes/v1/index.js中?

(p.s我对表达还很陌生)

关于node.js - Nodejs+express 应用程序 API 的正确模块化结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28318293/

相关文章:

python - 使用 Python API 创建产品时未收到来自 Shopify 的响应

node.js - NPM 无法工作! "Error: ECONNREFUSED, Could not contact DNS servers"

javascript - Node JS : Getting started with express

node.js - 处理 Mongoose 验证错误——在哪里以及如何处理?

javascript - Node ES6 : class is not a function

javascript - 无法向特定房间发送消息[socket.io]

php - 如何使用 Mailgun API 设置这些电子邮件 header

api - 如何在 Alphavantage 的 URL 中使用带有 "."的符号?

javascript - 如何使用 ExpressJS 从 jQuery ajax post 获取数据

node.js - 如何禁用 WebStorm 分号检查?