我正在阅读有关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类加载外部路由?
答案 0 :(得分:2)
在快递4中,您使用路由器构建路线。
所以,假设你有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;
在主服务器文件中,您可以app.use这些路由器,将它们连接到不同的地方。您也可以使用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 / foo / bar。
为了更加技术正确,您还应该只在需要它的路由上包含中间件。
您可以按路由器或每个端点执行此操作。
router.use(bodyParser.json());
// or
router.route('/baz')
.use(bodyParser.json())
.post(function(req, res){
res.status(201).json(req.body);
});
这通常是好事,但在某些情况下也很重要,例如:处理文件上传。