我想创建一个可以在程序运行时更改的路径。
示例:app.get('/',function(req,res){/*Something here*/};
这是正常路线。
我想用一个可以用随机数替换的变量替换'/'
。之后,我将使用nodejs模块创建一个qrcode,扫描此qrcode的用户将确认一种交易。
如果您了解我的想法并且您有解决方案,我会接受它。
答案 0 :(得分:0)
正如@Louy所说,使用parameters
:
var getQRCode = require('./yourQRCodeModule');
app.param('qrcode', function(req, res, next, qrcode) {
// qrcode will be "1234" if your request path was "/1234"
console.log('checking qrcode: %s', qrcode);
// get the qrcode from some asynchronous function
getQRCode(qrcode, function callback(err, qrcode) {
// if this number was not a valid dynamic path, return an error from your module
console.log('qrcode was %s', (!err && qrcode) ? 'valid' : 'invalid');
if (err) {
next(err);
} else if (qrcode) {
req.qrcode = qrcode; // object from your module
next();
} else {
next(new Error('failed to load QR code'));
}
});
});
app.get('/:qrcode', function (req, res) {
// req.qrcode will be the object from your module
// if the number was invalid, this will never be called
});
我想要指出的是,您对这种情况的看法与表达方式解决问题的方式不同。您想要一个具有特定qrcode的一次性路由,但这些路由在express中不存在。所以这就是我理解的理想解决方案:
app.getOnce("azjzso1291084JKioaio1", function(req, res){...})
这就是我的建议:
var qrcodes = {}; qrcodes["azjzso1291084JKioaio1"] = {some: 'object'};
app.param
异步函数可能如下所示:
// yourQRCodeModule.js
var qrcodes = {};
qrcodes["azjzso1291084JKioaio1"] = {some: 'object'};
module.exports = function getQRCode(qrcode, callback) {
if (qrcodes[qrcode]) {
var obj = qrcodes[qrcode]; // copy object
delete qrcodes[qrcode]; // remove from memory here
callback(null, obj);
} else {
// invalid path
callback(new Error('invalid QR code'), null);
}
};
现在请注意,如果您请求/azjzso1291084JKioaio1
两次,则第二次失败。如果我没有弄错的话,这就是你打算如何工作的。