【Express】路由

时间:2021-08-05 08:53:44
var express = require('express');

var app = express();
app.set('port', process.env.PORT || 3000); app.get('/', function(req, res) {
res.type('text/plain');
res.send('Meadowlark Travel');
});
app.get('/about', function(req, res) {
res.type('text/plain');
res.send('About Meadowlark Travel');
}); /*
* 通配符 我们对定制的404和500页面的处理与对普通页面的处理应有所区别:用的不是app.get,而是app.use。
app.use是Express添加中间件的一种方法。
在Express中,路由和中间件的添加顺序至关重要。
如果我们把404处理器放在所有路由上面,那首页和关于页面就不能用了,访问这些URL得到的都是404。
*/ // Express能根据回调函数中参数的个数区分404和500处理器
// 定制404页面
app.use(function(req, res) {
res.type('text/plain');
res.status(404);
res.send('404 - Not Found');
}); //定制500页面
app.use(function(err, req, res, next) {
console.error(err.stack);
res.type('text/plain');
res.status(500);
res.send('500 - Server Error');
}); app.listen(app.get('port'), function(){
console.log( 'Express started on http://localhost:' +
app.get('port') + '; press Ctrl-C to terminate.' );
});

中间件

var app = require('express')();

app.use(function(req, res, next){
console.log('\n\nALLWAYS');
next();
}); app.get('/a', function(req, res){
console.log('/a: 路由终止');
res.send('a');
});
app.get('/a', function(req, res){
console.log('/a: 永远不会调用');
}); app.get('/b', function(req, res, next){
console.log('/b: 路由未终止');
next();
});
app.use(function(req, res, next){
console.log('SOMETIMES');
next();
});
app.get('/b', function(req, res, next){
console.log('/b (part 2): 抛出错误' );
throw new Error('b 失败');
});
app.use('/b', function(err, req, res, next){
console.log('/b 检测到错误并传递');
next(err);
}); app.get('/c', function(err, req){
console.log('/c: 抛出错误');
throw new Error('c 失败');
});
app.use('/c', function(err, req, res, next){
console.log('/c: 检测到错误但不传递');
next();
}); app.use(function(err, req, res, next){
console.log('检测到未处理的错误: ' + err.message);
res.send('500 - 服务器错误');
}); app.use(function(req, res){
console.log('未处理的路由');
res.send('404 - 未找到');
}); app.listen(3000, function(){
console.log('监听端口3000');
});