首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NodeJS模块化

NodeJS模块化
EN

Stack Overflow用户
提问于 2014-05-12 07:59:52
回答 3查看 377关注 0票数 11

因此,有人告诉我,在request和或response变量中传递nodeJS是“不好的做法”。但这意味着您的大部分代码必须在server.js文件中,这使得它变得杂乱无章,有点难看。

如何模块化nodejs服务器,适当地传递req/res并将代码组织成单独的文件?

例如,我希望将套接字路由、.get.post拆分为不同的文件,但仍然能够使用回调参数,如下所示:

代码语言:javascript
复制
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");
});

现在他们都在一个文件里,我不喜欢这样。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-12 17:55:14

我认为这个人所说的“四处走动”的意思是这样的(直截了当的):

代码语言:javascript
复制
app.get('/kittens', function(req, res) {
  db.doAthing(req);
  updateSomethingElse(res);
  upvoteThisAnswer(res);
});

也就是说,在第一个函数之后传递两个变量。这是不好的,因为它变得越来越难找出调用的实际结束。一个小的res.end(500)updateSomethingElse可以导致整个扑克牌的房子滚落下来。

在其他地方声明回调(通常是项目的/routes目录)是完全可以的(实际上,这是默认的特快)。

代码语言:javascript
复制
// 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

代码语言:javascript
复制
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);
  });
};
票数 7
EN

Stack Overflow用户

发布于 2014-05-12 18:02:06

这段来自TJ Holowaychuk的视频帮助我将Express模块化提升到了一个更高的水平。基本上,您可以在自己的文件夹中制作单个应用程序,并将它们作为中间件使用。我已经用一些技巧将此技术扩展到socket.io。

http://vimeo.com/56166857

票数 1
EN

Stack Overflow用户

发布于 2014-05-12 09:42:53

不应将req和res传递到另一个模块,而应将来自另一个模块的回调传递到路由。它应该看起来像。

代码语言:javascript
复制
var someModule = require("./someModule")

app.get("/someAction", someModule.handleSomeAction) ;

如果您希望有post并进入另一个模块,您应该将app (从express())的引用(从)传递到该模块,并对其进行操作。

例如:

代码语言:javascript
复制
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_处理程序中:

代码语言:javascript
复制
var app;
exports.init = function( eApp){
    app = eApp;
    // operate on app 
} 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23603803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档