var express = require('express');
var tracker = require('../lib/pixel-track')
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res) {
res.render('index', { title: 'index' });
});
router.get(/^\/(([0-9a-zA-Z\._-])+.(gif|GIF))$/, tracker.requestHandler);
module.exports = router;
所以我有这个快递路由器。根据我的逻辑,第二个语句匹配任何对`/whatever.gif的请求,第一个语句仅用于/。出于某种原因,请求/仍然发送gif。关于正则表达式路由处理程序如何接管我的索引路由处理程序,我有点困惑。
有趣的是,我在/ api位置有完全相同的正则表达式路由和跟踪器代码,它工作正常,而不是覆盖索引。另外,如果我注释掉router.get(' /' ...路由,它仍然显示localhost:4000
的像素答案 0 :(得分:1)
我不直接使用路由器模块。不知道你用这种方式瞄准的是什么?
你也不需要这么复杂的正则表达式:
var express = require('express');
var app = express();
/* GET home page. */
app.get('/', function(req, res) {
console.log("got /");
res.end("/");
});
app.get(/^\/[\w-.]+\.gif$/i, function(req, res) {
console.log("got gif");
res.end("a gif!");
});
app.listen(8000);
<强>更新强>
最好的我可以告诉,原因是它没有在你的代码中处理你的原始路由,因为在你的repo中,api
var(索引文件的路径)是var api = require('./routes/api/index');
而你的索引是设置的在indexRoute
中你并没有在任何地方使用它。请记住,在路由中,app.use
中定义的路径被视为基本路径,因此:
假设你的app.js中有这个:
var indexRoute = require('./routes/index');
var api = require('./routes/api/index');
app.use('/', indexRoute);
app.use('/api', api);
这些路线处理程序:
// /routes/api/index.js
router.get('/', function(req, res) {
res.send('You called api route /');
});
// /routes/index.js
router.get('/', function(req, res) {
res.send('You called index route /');
});
router.get(/^\/[\w-.]+\.gif$/i, function(req, res) {
res.end("a gif!");
});
这似乎对我有用(尽管app.use(express.static(path.join(__dirname, 'public')));
阻止了/
路线!)。