路由参数仅获取第一个字母

时间:2014-08-18 13:45:06

标签: javascript node.js express

我有以下代码。它允许我获取图像,并指定是否需要重新缓存。例如,/something.jpg/force。它也可以是图像的ID,例如/7GDF4G。如您所见,强制参数是可选的。

app.get('/:image/:force?*', function (req, res) {
    console.log("image req");
    // Create variable to hold force bool, default is false
    var force = false;
    // Check if force bool is present
    if (req.params.force === ('force' || 'true' || 'recache' || 're-cache')) {
        force = true;
    }
    // Pass req, res, image variable and force bool to process
    mod.request.process({
        req : req,
        res : res
    }, {
        type : 'image',
        id : req.params.image
    }, force);
});

运行时,所有内容都按预期传递到mod.request.process()。但是,如果我添加以下内容以查看为:image返回的值:

console.log(JSON.stringify(data));

这是记录的内容:

{"type":"image","id":"k"}

输入网址为kMoI9Vn.jpg/force,因此id应为kMoI9Vn.jpg。如果我使用something.jpg再次运行它,我会得到{"type":"image","id":"s"}

关于为什么会发生这种情况的任何想法?

1 个答案:

答案 0 :(得分:1)

为什么不删除星号并仅使用/:image/:force?

这适用于两个例子:

var pathToRegexp = require('path-to-regexp');

var keys = [];
var exp = pathToRegexp('/:image/:force?', keys);
console.dir(exp.exec('/7GDF4G'));
console.dir(exp.exec('/something.jpg/force'));

// outputs:
// [ '/something.jpg/force',
//   'something.jpg',
//   'force',
//   index: 0,
//   input: '/something.jpg/force' ]
// [ '/7GDF4G', '7GDF4G', undefined, index: 0, input: '/7GDF4G' ]