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
示例代码时出现类型错误?
答案 0 :(得分:0)
请查看此处的路径格式:https://www.npmjs.com/package/routes#path-formats
显然,使用router.addRoute('/admin/*?', auth);
后,我们无法期望在localhost:1337/admin
或localhost:1337/admin/
投放
要实现此目的,只需删除?
。
简单地使用router.addRoute('/admin/*', auth);
,您最好使用localhost:1337/admin/
。虽然我仍然怀疑localhost:1337/admin
会奏效。正如文档所述,我们需要使用router.addRoute('/admin', auth);