在ExpressJS中创build模块化REST API

在Node / Express中创buildRESTful API时遇到了一些麻烦。 在我正在构build的应用程序中,用户有很多消息,消息属于用户。 我需要能够做出HTTP请求来检索特定用户的所有消息。 这里是应用程序的基本结构,从基本服务器开始,它将代理路由委托给一个名为“config / middleware.js”的文件。

//server.js var express = require('express'); var bodyParser = require('body-parser'); var app = express(); require('./config/middleware.js')(app, express); var port = process.env.PORT || 8080; app.use(bodyParser.json()); app.use(express.static(__dirname + '/../client')); app.listen(port); 

这是我们向适当的路由器发送请求的中间件文件。 对“用户/ 5 /消息”的请求将被路由到消息路由器,并且对“用户/ 5”的请求将被路由到用户路由器。

 // config/middleware.js module.exports = function(app, express) { var usersRouter = express.Router(); var messagesRouter = express.Router(); app.use('/users/:userId/messages', messagesRouter); app.use('/users', usersRouter); require('../routers/users')(usersRouter); require('../routers/messages')(messagesRouter); }; 

这是消息路由器。 如果对“/ users / 5 / messages”发出get请求,我想要运行getAllMessages函数,该函数将返回具有userId 5的用户的所有消息。

 // routers/messages.js var messagesController = require('../controllers/messages'); module.exports = function(app) { app.get('/:messageId', messagesController.getMessage); app.get('/', messagesController.getAllMessages); }; 

问题是getAllMessages函数无法访问'userId'参数(值为5),这是为了对数据库进行适当的查询所必需的。 控制器中的getAllMessages函数需要将userId存储在req.params.userId上。 有没有办法让getIllMessages函数内的req.params对象的5的userId?

req.params不会沿path链传递。 要做到这一点,你可以做类似的事情

server.js ,在req上创build一个键。 这将在路由之间传递数据。 在安装路线之前执行此操作。

 app.use(function (req, res, next) { req._data = {}; next(); }); 

config/middleware.js

  module.exports = function(app, express) { var usersRouter = express.Router(); var messagesRouter = express.Router(); // attach usedId app.use('/users/:userId/messages', function (req, res, next) { req._data.userId = req.params.userId; next(); }); // mount the router app.use('/users/:userId/messages', messagesRouter); app.use('/users', usersRouter); require('../routers/users')(usersRouter); require('../routers/messages')(messagesRouter); }; 

这样,你就可以访问routers/messages.js req._data.userId

附注:一个更好的方式来构build路线将是使用类似,(读无耻的插件), https://github.com/swarajgiri/express-bootstrap/blob/master/web/routes.js

你可以使用app.localsres.locals来传递一些数据。

关于当地人有一个很好的解释。

使用示例:

 app.locals.userid = req.params.userId; //binding userid app.locals.userid // => '5' 

OR:放一个全局variables。

 user_id_tmp = req.params.userId; 

现在,这成为应用程序中的全局variables。 所以你可以从任何地方调用user_id_tmpvariables。

我正在寻找相同的。 以下是github和auther网站上的模块应用程序示例

此外,我们可以根据我们的要求更改或更新结构