无法映射路由文件与ExpressJS路由器
我正在阅读一本关于ExpressJS的介绍书,不幸的是他们正在使用Express 3.x。 我试图让他们的代码示例更新到Express 4.x. 这是他们的例子:
路线/ index.js
exports.index = function(req, res){ res.send('welcome'); };
app.js
var express = require('express'); var http = require('http'); var app = express(); // Load the route handlers var routes = require('./routes'); // Add router middleware explicitly app.use(app.router); // Routes app.get('/', routes.index); http.createServer(app).listen(3000, function(){ console.log('App started'); });
在这里, app.router
被弃用,节点抛出一个关于它的错误。 我已经更新了代码:
var http = require('http'); var express = require('express'); var app = express(); var bodyParser = require('body-parser'); var router = express.Router(); var routes = require('./routes'); router.get('/', routes.index); app.use(bodyParser.urlencoded({extended: true})); app.use(bodyParser.json()); http.createServer(app).listen(3000, function() { console.log('Express app started'); });
但是,当访问localhost:3000
,我得到这个错误显示在浏览器中:
Cannot GET /
如果我完全删除了Router类的使用(并删除了app.use(app.router)
),我可以这样做:
app.get('/', routes.index);
这将工作。
我如何使用Router类加载我的外部路由?
在快递4中,您使用路由器构build您的路线。
所以,假设你有routes / index.js和routes / foo.js,他们看起来像这样:
// routes/index.js var router = require('express').Router(); router.get('/', function(req, res){ res.send('Hello!'); }); module.exports = router;
// routes/foo.js var router = require('express').Router(); router.get('/bar', function(req, res){ res.send('foobar'); }); module.exports = router;
在您的主服务器文件中,您可以使用这些路由器,将它们连接到不同的地方。 你也可以使用router.use将路由器连接到路由器(例如/ users / user-id / pictures / picture-id种类的路由)。
// server.js var http = require('http'); var express = require('express'); var app = express(); var bodyParser = require('body-parser'); app.use('/', require('./routes/index')); app.use(bodyParser.urlencoded({extended: true})); app.use(bodyParser.json()); app.use('/foo', require('./routes/foo')); app.listen(3000);
你现在应该能够GET /和GET / foo / bar。
对于更多的技术上的正确性,你也应该只在需要它的路由中包含中间件。
您可以按路由器或每个端点执行此操作。
router.use(bodyParser.json()); // or router.route('/baz') .use(bodyParser.json()) .post(function(req, res){ res.status(201).json(req.body); });
这通常很好,但在某些情况下也是非常重要的,例如处理file upload。