组织大型Node.js项目有哪些好方法?
例如,一个使用express.js和socket.io的应用程序?这将包括应用程序逻辑结构以及文件系统.
目前,我发现自己将大量代码推入单个主js文件并将代码放入一个巨大的全局对象中,它感觉很顽皮.
我想将路由与server.js文件分开.
我正在关注Scotch.io的这个教程 http://scotch.io/tutorials/javascript/build-a-restful-api-using-node-and-express-4
如果所有行都在server.js文件上,则它正在工作.但我没能分开.我怎样才能做到这一点?
server.js
// set up ======================================================================
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
// configuration ===============================================================
app.use(bodyParser());
var port = process.env.PORT || 8000;
var mongoose = require('mongoose');
var database = require('./config/database');
mongoose.connect(database.url);
var Video = require('./app/models/video');
// routes =======================================================================
app.use('/api', require('./app/routes/routes').router);
// listen (start app with node server.js) ======================================
app.listen(port);
console.log("ready captain, on deck" + port);
module.exports = app;
Run Code Online (Sandbox Code Playgroud)
和app/routes/routes.js
var express = require('express');
var router = express.Router();
router.use(function(req, res, next) { …Run Code Online (Sandbox Code Playgroud) 我有一个带有以下代码的应用程序:
var router = express.Router();
router.post('/routepath', function(req, res) {});
Run Code Online (Sandbox Code Playgroud)
现在我必须把路由代码在不同的文件,所以我试图用这种方法,但它不是,因为不是工作也许express.Router()它使用:
app.post("/routepath", function (req, res) {});
Run Code Online (Sandbox Code Playgroud)
如何使用路由器在不同的文件中express.Router()?
为什么app.get,app.post,app.delete,等,都没有工作在app.js使用后express.Router()在其中?
我正在尝试模块化我的node.js应用程序(使用快速框架).我遇到的麻烦是在设置我的路线时.
我无法再提取发送到帖子的数据.(req.body未定义).如果它们都在同一个文件中,则可以正常工作.我在这里做错了什么,在node.js中模块化代码的最佳方法是什么?
我的app.js.
require('./routes.js').setRoutes(app);
Run Code Online (Sandbox Code Playgroud)
我的路线.js
exports.setRoutes = function(app){
app.post('/ask', function(req, res, next){
time = new Date();
var newQuestion = {title: req.body.title, time: time.getTime(), vote:1};
app.questions.push(newQuestion);
res.render('index', {
locals: {
title: 'Questions',
questions: app.questions
}
});
});
Run Code Online (Sandbox Code Playgroud) 我编写了两个相对较大的 socket.io 应用程序,一个用于玩游戏,另一个用于聊天,我将它们分成两个命名空间。
我现在想将这些从我的主文件中app.js移到某个命名空间目录中,并且只需要在我的 express 应用程序中使用它们,从而保留所有功能。
我将如何解决这个问题,或者有什么方法可以以其他方式获得我想要做的事情的效果?
我已经尝试了我在 s/o 上找到的所有答案,我确定我一定遗漏了一些东西。什么对我没有错误而是给了我一个 404。我尝试了来自Node.js 中组织路由的答案,strongloop 的路由分离模式,来自如何在 Express 中的多个文件中包含路由处理程序的答案?, 遇到类似Router.use 需要中间件功能的错误?但这些答案都没有奏效。在 Express 4.0中无法将路由拆分为单独的文件的答案不会出错,但也会出现 404。似乎每个答案都有不同的语法和风格,也许是我混合和匹配不正确?
现在我的 /routes/persons.js 有这个模式:
var express = require('express');
var persons = express.Router();
persons.route('/persons/:user_id')
.put(function (req, res, next) {
// etc
});
module.exports = persons;
Run Code Online (Sandbox Code Playgroud)
在我的 server.js 文件中,我有:
var persons = require('./routes/persons');
app.use('/persons', persons);
Run Code Online (Sandbox Code Playgroud)
这种组合不会引发错误,但也不会执行任何操作。我尝试将端点添加到 server.js 行:
var persons = require('./routes/persons');
app.get('/persons/:user_id', persons.addpersons);
Run Code Online (Sandbox Code Playgroud)
并将 people.js 剥离为仅导出功能:
exports.addpersons = function (req, res, next) { …Run Code Online (Sandbox Code Playgroud) 我想在多个文件中路由
var routes=require('./routes');
Run Code Online (Sandbox Code Playgroud)
在routes/index.js中
exports.inicio=require('./inicio')
exports.home=require('./home')
Run Code Online (Sandbox Code Playgroud)
在inicio.js
exports.index=function(req,res){res.render('index/index',{title: 'Bienvenido a Inmoweb'});}
Run Code Online (Sandbox Code Playgroud)
在home.js
exports.nosotros=function(req, res){res.render('index/nosotros',{title:'Nosotros'});}
Run Code Online (Sandbox Code Playgroud)
当我console.log(路线)
{
inicio: {index:[function]},
home: {nosotros:[function]}
}
Run Code Online (Sandbox Code Playgroud)
所以我打电话给应用程序
app.get('/',routes.inicio.index);
Run Code Online (Sandbox Code Playgroud)
但我想这样打电话
app.get('/',routes.index);
app.get('/nosotros',routes.nosotros);
Run Code Online (Sandbox Code Playgroud)
和console.log supose是????
{
index:[function],
nosotros:[function]
}
Run Code Online (Sandbox Code Playgroud)
怎么做???tnx全部
我正在尝试为我的服务器及其结构找到解决方案.我想要做的就是分开.
app.post("/login", function(request, response) {
});
app.post("/register", function(request, response) {
});
app.get("/", function(request, response) {
});
Run Code Online (Sandbox Code Playgroud)
到不同的文件.在我的例子中,他们都站在一个名为"server.js"的文件中.我怎样才能将它们分开来更好地处理它们?并同时运行它们.我搜索了这种情况,发现了不同类型的这种情况.但无法得到明确的答案.