因此,我被告知在nodeJS中传递request
and或response
变量是“不好的做法”。但这意味着您的大多数代码都必须位于server.js文件中,从而使其变得混乱且难看。
如何将Node.js服务器模块化,req/res
适当地传递,并能够将代码组织到单独的文件中?
例如,我想我的分裂插座的路由,.get
并.post
为不同的文件,但仍然可以使用回调参数,如下所示:
app.io.route("disconnect", function(req,res) { <--- these params
db.query("UPDATE player_data SET online=0 WHERE id="+mysql.escape(req.session.user));
req.io.broadcast("event", {msg:req.session.username+" has logged out!"});
app.io.broadcast("reloadXY");
});
截至目前,它们都在一个文件中,我不喜欢这样。
我认为这个人“绕过”的意思是这样的(简单地说):
app.get('/kittens', function(req, res) {
db.doAthing(req);
updateSomethingElse(res);
upvoteThisAnswer(res);
});
也就是说,传递两个变量到第一个函数之外。这很糟糕,因为弄清楚呼叫实际在哪里结束变得越来越困难。一个小res.end(500)
的updateSomethingElse
可能会导致卡的整个房子轰然倒塌。
在其他地方(通常是/routes
项目的目录)声明该回调是完全可以的(实际上,这是express中默认的标准)。
// app.js
var user = require('./routes/user')
, kittens = require('./routes/kittens');
// express stuff...
app.get('/settings', user.getSettings);
app.get('/fur', kittens.shed);
然后,在routes/user.js
:
exports.getSettings = function(req, res) {
// Note how we're passing around properties of req/res, not the objects themselves.
db.getUserSettings(req.user.id).then(function(settings) {
res.render('settings', settings);
});
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句