NodeJS模块化

斯特林弓箭手

因此,我被告知在nodeJS中传递requestand或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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章