在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.locals或res.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网站上的模块应用程序示例
此外,我们可以根据我们的要求更改或更新结构