Javascript 节点模块化
因此,我被告知在nodeJS中传递Javascript 节点模块化,javascript,node.js,express,modularity,Javascript,Node.js,Express,Modularity,因此,我被告知在nodeJS中传递请求和/或响应变量是“糟糕的做法”。但这意味着您的大部分代码必须在server.js文件中,这使得它变得杂乱无章,有点难看 如何将nodejs服务器模块化,适当地传递req/res,并将代码组织到单独的文件中 例如,我想将套接字路由、.get和.post拆分为不同的文件,但仍然可以使用如下回调参数: app.io.route("disconnect", function(req,res) { <--- these params db.query("
请求
和/或响应
变量是“糟糕的做法”。但这意味着您的大部分代码必须在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");
});
app.io.route(“disconnect”,function(req,res){您不应该将req和res传递给其他模块,而应该将来自其他模块的回调传递给route。
应该是这样的
var someModule = require("./someModule")
app.get("/someAction", someModule.handleSomeAction) ;
如果你想发布并进入另一个模块,你应该将对app的引用(from express())传递给该模块一次,并对其进行操作
例如:
var express = require("express") ;
var app = express();
var get_handler = require("./get_handler ")
var post_handler = require("./post_handler ")
get_handler.init(app);
post_handler.init(app);
在post/get_处理程序中:
var app;
exports.init = function( eApp){
app = eApp;
// operate on app
}
我认为这个人所说的“路过”的意思是这样的(简单地说):
也就是说,在第一个函数之外传递两个变量。这是不好的,因为它越来越难以确定调用的实际结束位置。在updateMethingElse
中只需一点res.end(500)
,就会导致整个纸牌屋倒塌
在其他地方(通常是项目的/routes
目录)声明回调是完全可以的(事实上,标准到express中的默认值)
然后,在路由/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);
});
};
这段视频来自TJ Holowaychuk(编写Express和大量其他我们都使用的节点基础设施的人)帮助我将快速模块化提升到了一个新的水平。基本上,你可以在自己的文件夹中创建单独的应用程序,并将其作为中间件使用。我通过一些技巧成功地将此技术扩展到socket.io
补充链接很棒,但不应包含您答案的关键。
// app.js
var user = require('./routes/user')
, kittens = require('./routes/kittens');
// express stuff...
app.get('/settings', user.getSettings);
app.get('/fur', kittens.shed);
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);
});
};