Как сказал @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. Так вот что я понимаю ваше идеальное решение, чтобы выглядеть следующим образом:
- сервер создает «azjzso1291084JKioaio1» для QRCode
- вы регистрируете что-то вроде
app.getOnce("azjzso1291084JKioaio1", function(req, res){...})
- впервые запрос вызывается, он удален от вашего прямого маршрутизатора
Вот что я предлагаю:
- сервер CRE ates "azjzso1291084JKioaio1" для qrcode
- ваш модуль хранит этот qrcode либо в базе данных, либо в памяти в вашем модуле, например.
var qrcodes = {}; qrcodes["azjzso1291084JKioaio1"] = {some: 'object'};
- ваш
app.param
асинхронная функция, основанная на примере, приведенном на шаге 2 может выглядеть следующим образом:
// 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
дважды, второй раз терпит неудачу. Так вы намереваетесь работать, если я не ошибаюсь.
Используйте [параметры] (http://expressjs.com/ru/api.html#app.param). – Louy
Да, черт, но url в qrcode должен быть уникальным и случайным. – Arwinne1
Вот для чего нужны параметры. Также, пожалуйста, приложите немного усилий (что вы пробовали до сих пор и не работали для вас и т. Д.) – Louy