尝试使用Node运行路由示例代码时,获取网页不可用错误

时间:2014-09-13 05:52:31

标签: javascript node.js

Javascript newbie here ..

我试图运行routes文档中给出的示例代码。

代码:

var Router = require('routes');
var router = new Router();

router.addRoute('/admin/*?', auth);
router.addRoute('/admin/users', adminUsers);

http.createServer(function (req, res) {
  var path = url.parse(req.url).pathname;
  var match = router.match(path);
  match.fn(req, res, match);
}).listen(1337)

// authenticate the user and pass them on to
// the next route, or respond with 403.
function auth(req, res, match) {
  if (checkUser(req)) {
    match = match.next();
    if (match) match.fn(req, res, match);
    return;
  }
  res.statusCode = 403;
  res.end()
}

// render the admin.users page
function adminUsers(req, res, match) {
  // send user list
  res.statusCode = 200;
  res.end();
}

我可以通过node app.js运行它,它启动正常。但是,当我点击http://localhost:1337/admin时,我收到以下错误:

TypeError: Cannot call method 'fn' of undefined  

为了确保我在服务器上没有做错,我将其重置回示例节点应用程序:

http.createServer(function (req, res) {
  .write("Hello world!");
  res.end();
}).listen(1337)

这样运行正常。我可以点击localhost并看到它打印出你好世界。那么为什么在运行routes示例代码时出现类型错误?

1 个答案:

答案 0 :(得分:0)

请查看此处的路径格式:https://www.npmjs.com/package/routes#path-formats

显然,使用router.addRoute('/admin/*?', auth);后,我们无法期望在localhost:1337/adminlocalhost:1337/admin/投放 要实现此目的,只需删除?

简单地使用router.addRoute('/admin/*', auth);,您最好使用localhost:1337/admin/。虽然我仍然怀疑localhost:1337/admin会奏效。正如文档所述,我们需要使用router.addRoute('/admin', auth);