javascript - Nodejs connet使用错误处理中间组件 浏览器显示Cannot GET /是因为什么?
阿神
阿神 2017-04-11 09:45:59
[JavaScript讨论组]

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参数的组件

阿神
阿神

闭关修行中......

全部回复(2)
PHP中文网

可能是因为最后一步你没往errorHandler中传任何参数吧,试着把users最后的next()里传入参数就正常报错了

ringa_lee

要执行有err参数的方法,一定要next()中有参数,比如next(new Error("sorry! not found"));

不会吧,因为你的errorHandler前面的中间件是users,所以把error写在users中的next中了。请看users中的变化。

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(new Error("错了"));
  }
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号