我已经创建了一个 nodeJS 应用程序,它需要创建一个可以正常工作的服务器,在文件 server.js 中如下所示:
http.createServer(app).listen(app.get('port'), function (err) {
if (err) {
console.error(err);
} else {
runProcess();
console.log('Server listening on port ' + app.get('port'));
}
});
现在我需要将此服务器传递给某个文件,并且我的应用程序构建如下:
server.js
app.js
routes.js
action.js
所以我按照下面的方法快速完成了,有更好的方法吗?
这是修改后的server.js:
var server = http.createServer(app);
app.setServer(server);
server.createServer(app).listen(app.get('port'), function (err) {
if (err) {
console.error(err);
} else {
runProcess();
console.log('Server listening on port ' + app.get('port'));
}
});
在 app.js 我有路由器文件,我确实喜欢以下内容:
app.use('/', routes.router, function (req, res, next) {
next();
});
app.setServer = function(http) {
routes.setServer(http);
}
module.exports = app;
这段代码我放在 router.js 文件中:
module.exports = {
router: applicationRouters,
setServer: function(http) {
//here I set server to the file action.js
action.setServer(http);
}
}
而在 Action js中,我做了以下操作:
module.exports = {
setServer: function(http) {
...
我需要在层之间传递http,而不是在不同的文件/模块中使用它。我如何在 node.js 中做到这一点?
最佳答案
您不需要将服务器传递给路由。只需在创建服务器之前包含它们:
someroute.js
var router = require("express").Router();
router.use('/', routes.router, function (req, res) {
return res.json();
});
module.exports = router;
server.js
var app = express();
....
var someroute = require("./routes/someroute");
app.use("/someroute", someroute);
server.createServer(app);
根据反馈更新答案:
在您的 server.js 文件中,您可能有一个变量来保存初始化时的 socket.io
实例,我们称之为 io
.
您将像这样初始化 io
变量:
//example taken from socket.io front page
var io = require('socket.io')(80);
注册中间件时,您可以将此变量附加到 req
并在路由中使用它:
//this goes prior to your route registration
app.use(function(req, res, next) {
req.io = io;
});
在路由中,您会将 req.io
称为套接字实例:
router.use('/', routes.router, function (req, res, next) {
req.io.emit("something", {});
});
关于javascript - 如何在层之间传递 http 服务器变量,而不是将其用作 node.js 中不同文件中的 require 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32881454/