无法映射路由文件与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。