NodeJS/Express app.use sequence and usage
NodeJS/Express app.use sequence and usage
我试图将我的节点路由分为两部分:HTML/App 和 REST。这是我所做的:
应用.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);
});
索引.js:
var express = require('express');
var router = express.Router();
router.get('/*', function (req, res) {
res.send('HOME')
});
module.exports = router;
休息.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 的顺序是否重要,和/或我必须处理"下一步"?
3. 如果我想访问路由器内的数据库,我可以交出这样的参数吗:
// ...
var client = new pg.Client(dbConnection);
// ...
app.use('/', appRouter(client));
1(可以通过这种方式构建多个路由器。
因为你正在使用这个:
app.use('/api/rest/', restRouter);
您在 rest.js
中的路由调用将相对于/api/rest/
这意味着您的代码应该在rest.js
中修改,如下所示:
router.get('*', function(req, res) {
res.send('REST API');
});
我还鼓励您在GitHub上查看Express多路由器示例。 它通过显示具有版本控制路由的 REST 应用非常清楚地说明了这一点。
2(事情的顺序很重要
请参阅 app.use 的 Express 文档,您将注意到:
中间件函数是按顺序执行的,因此顺序为 包含中间件很重要。
如果您颠倒app.use
呼叫的顺序,index.js
中的router.get('/*', function (req, res) {
线路将在您到达其他路线之前捕获所有内容......挫败你的目的。
另外,如果你不打电话next
,Express没有办法知道你已经完成了,甚至你想继续下一个中间件或路由。
3(数据库问题是模块/范围问题
这更像是一个范围问题,而不是一个明确的问题。 我建议查找一些关于javascript范围的优秀文章,以及Node如何处理模块。
相关文章:
- Selenium WebDriver and JavaScript change
- PHP and Javascript functions
- Javascript Return and if/else
- SetTimeout and clearTimeout in Javascript
- lightbox in html 5 and javascript
- TimelineJS and AngularJS
- timeago.js with datatable and PHP
- javascript button ajax and php
- Ajax and Json with Rails
- Combine onload, onresize and onclick
- php布尔值's小写AND大写和数字布尔值'可以接受
- setTimeout and V8
- Jquery post and onclick
- Moment js and IOS
- Rails 3.2 and Paloma gem
- Backbone, TypeScript, and super
- iframe and JavaScript on different pages
- JSON and jQuery Search
- Javascript and jQuery Execution/Sequence
- NodeJS/Express app.use sequence and usage