NodeJS模块化

Ste*_*her 11 javascript modularity node.js express

所以,我被告知在nodeJS 中传递request和/或response变量是"不好的做法".但这意味着你的大部分代码都必须在server.js文件中,这使得它变得杂乱无章.

你如何模块化你的nodejs服务器,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");
});
Run Code Online (Sandbox Code Playgroud)

截至目前,他们都在一个文件中,我不喜欢这样.

Som*_*ens 7

我认为这个人在"四处传播"中的意思是这样的(简单明了):

app.get('/kittens', function(req, res) {
  db.doAthing(req);
  updateSomethingElse(res);
  upvoteThisAnswer(res);
});
Run Code Online (Sandbox Code Playgroud)

也就是说,将两个变量传递到第一个函数之外.这很糟糕,因为要弄清楚呼叫实际结束的位置变得越来越困难.一个小res.end(500)updateSomethingElse可能会导致卡的整个房子轰然倒塌.

在其他地方(通常是/routes项目的目录)声明回调是完全可以的(事实上,标准到了快递中的默认值).

// app.js

var user = require('./routes/user')
  , kittens = require('./routes/kittens');

// express stuff...

app.get('/settings', user.getSettings);
app.get('/fur', kittens.shed);
Run Code Online (Sandbox Code Playgroud)

然后,在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);
  });
};
Run Code Online (Sandbox Code Playgroud)