nodejs connet自定义错误处理器的时候 打开监听的地址 浏览器显示Cannot GET
下面是代码
var connect = require('connect');
connect()
.use(hello)
.use(pets)
.use(users)
.use(errorHandler)
.listen(3000);
function hello(req, res, next) {
if (req.url.match(/^\/hello/)) {
res.end('Hello World\n');
} else {
next();
}
}
var db = {
users: [
{ name: 'qaz' },
{ name: 'wsx' },
{ name: 'edc' }
]
};
function users(req, res, next) {
var match = req.url.match(/^\/user\/(.+)/);
if (match) {
var user = db.users[match[1]];
if (user) {
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify(user));
} else {
var err = new Error('User not found');
err.notFound = true;
next(err);
}
} else {
next();
}
}
function pets(req, res, next) {
if (req.url.match(/^\/pet\/(.+)/)) {
foo();
} else {
next();
}
}
function errorHandler(err, req, res, next) {
console.error(err.stack);
res.setHeader('Content-Type', 'application/json');
if (err.notFound) {
res.statusCode = 404;
res.end(JSON.stringify({ error: err.message }));
} else {
res.statusCode = 500;
res.end(JSON.stringify({ error: 'Internal Server Error' }));
}
}
访问http://localhost:3000/hello 可显示出hello world
但访问pets时 直接显示Cannot GET /pets 而不是执行有err参数的组件
可能是因为最后一步你没往errorHandler中传任何参数吧,试着把users最后的next()里传入参数就正常报错了