【问题标题】:Correct modular structure of nodejs+express app for API正确的nodejs+express app for API的模块化结构
【发布时间】:2015-02-04 09:51:52
【问题描述】:

我正在尝试使用 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();
});

我的路由/v1/index.js 文件:

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

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

我的路由/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 版本”消息。

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

【问题讨论】:

    标签: node.js api express routes express-4


    【解决方案1】:

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

    请在您的 routes/v1/index.js 文件中尝试module.exports = user;

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

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

    【讨论】:

      【解决方案2】:

      与马特所说的类似,但不完全;

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

      这无济于事,你需要告诉你的路由器使用“用户”文件。

      var express = require('express');
      var router = express.Router();
      
      router.use('/user', require('./user'));
      module.exports = router;
      

      【讨论】:

        猜你喜欢
        • 2018-11-19
        • 1970-01-01
        • 2020-01-16
        • 2017-10-19
        • 2016-01-12
        • 2019-12-25
        • 2021-09-10
        • 2015-12-08
        • 2021-05-01
        相关资源
        最近更新 更多