我尝试将节点路由分为两部分:HTML/App和REST。这里是我做了什么:NodeJS/Express app.use序列和用法
app.js:
var appPort = process.env.PORT || 80;
var express = require('express');
var http = require('http');
var appRouter = require('./routes/index');
var restRouter = require('./routes/rest');
var app = express();
var srv = http.createServer(app);
app.set('port', appPort);
app.set('view engine', 'jade');
app.use(express.static(path.join(__dirname, 'public')));
app.use('/api/rest/', restRouter); // this seems not working .. I never get the expected response
app.use('/', appRouter); // I get this even with localhost/api/rest/...
var server = srv.listen(app.get('port'), function() {
debug('Express server listening ' + server.address().address + ':' + server.address().port);
});
index.js:
var express = require('express');
var router = express.Router();
router.get('/*', function (req, res) {
res.send('HOME')
});
module.exports = router;
rest.js
var express = require('express');
var router = express.Router();
router.get('/api/rest/*', function(req, res) {
res.send('REST API');
});
module.exports = router;
我的问题:
1通常可以用这种方式构建多个路由器?
2. get.use的顺序是否重要,和/或是否必须处理'next'?
3.在情况下,我想访问路由器内部的数据库,我可以交出一个参数是这样的:
// ...
var client = new pg.Client(dbConnection);
// ...
app.use('/', appRouter(client));
感谢所有帮助!
谢谢Matt,这对我有很大的帮助。让我深入讨论提到的来源,我想我会得到它。 – Rainer 2014-12-05 14:58:10
剩下的唯一问题是:如果序列很重要,并且在app.use(/)之前包含app.use(/ api/rest /),那么第二个app.use会不会捕获api/rest调用? – Rainer 2014-12-05 14:58:33
它可能会匹配,是的。有几件事情可能仍然会停止执行(我认为'res.end'是一个,但是如果没有发生,Express将移动到下一个中间件组件并运行它。 – 2014-12-05 15:12:31