在Node.js中组织各种请求

我是Node.js(和Express)的新手,我试图理解这一点。 假设我有一个有3页的网站(可以是GET或POST): //page1/page2 。 我应该怎么做,以便每个页面由一个单独的JS文件处理?

 app.all('/', function(request, response) { // Get home.js to handle this request and response }); app.all('/page1', function(request, response) { // Get page1.js to handle this request and response }); app.all('/page2', function(request, response) { // Get page2.js to handle this request and response }); 

更好的是,有没有办法定义一个通配符,所以没有太多的重复? 像这样的东西:

 app.all('*', function(request, response) { // Get *.js to handle this request and response. * is whatever the URI string is }); 

这里的诀窍是, app是创build它的文件的本地。 所以你必须把这个对象放到其他文件的范围内。

每个其他文件应导出一个function,您可以传递您的应用程序实例,以便它可以注册新的路线。 像这样的方法应该工作。

 // home.js exports.register = function(app) { app.all('/', function(request, response) { ... }); }; // page1.js exports.register = function(app) { app.all('/page1', function(request, response) { ... }); }; // page2.js exports.register = function(app) { app.all('/page2', function(request, response) { ... }); }; //server.js - setup the app app = express.createServer(); require('./home').register(app); require('./page1').register(app); require('./page2').register(app); 

而对于你的问题的第二部分,你想分享一些设置方法?

 app.all('*', function(req, res, next) { res.header 'x-snazzy-header', 'Im so snazzy' next() }); app.all('/page/:id', function(req, res) { res.send('content for page #'+ req.params('id')); }); 

首先,可以使用*或者像/users/:id这样的命名参数来匹配一系列的路由。 如果你想做一些常见的设置,你可以实际执行2条路线。 路由处理程序next接受可选的第三个参数。 当被调用时,它将尝试find下一个匹配的路由。 所以你可以用一些路由设置一些常见的头文件。

继续与@Alex讨论。 这是我做的。 任何疑难杂症?

 // app.js var EXPRESS = require('express'); var URL = require('url'); var PATH = require('path'); var app = EXPRESS.createServer(); app.all(/^\/([a-zA-Z0-9-]+)$/, function(request, response, next) { var page = request.params[0]; if (PATH.existsSync(__dirname + '/' + page + '.js')) { require('./' + page).handleRequest(request, response, next); } else { next(); } }); app.all('*', function(request, response) { response.send('Catch all'); }); // --- truncated for brievity // page1.js exports.handleRequest = function(request, response, next) { response.send('Howdy!'); };