2016-01-11 2 views
0

Я хочу создать маршрут, который может измениться во время работы программы. Пример: app.get('/',function(req,res){/*Something here*/}; Это обычный маршрут. Я хочу заменить '/' на переменную, которую можно заменить на случайное число. После этого я создам qrcode с модулем nodejs, и пользователь, который сканирует этот qrcode, подтвердит своего рода транзакцию.«Динамический маршрут» с expressjs

Если вы понимаете мою идею, и у вас есть решение, я возьму ее.

+0

Используйте [параметры] (http://expressjs.com/ru/api.html#app.param). – Louy

+0

Да, черт, но url в qrcode должен быть уникальным и случайным. – Arwinne1

+1

Вот для чего нужны параметры. Также, пожалуйста, приложите немного усилий (что вы пробовали до сих пор и не работали для вас и т. Д.) – Louy

ответ

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. Так вот что я понимаю ваше идеальное решение, чтобы выглядеть следующим образом:

  1. сервер создает «azjzso1291084JKioaio1» для QRCode
  2. вы регистрируете что-то вроде app.getOnce("azjzso1291084JKioaio1", function(req, res){...})
  3. впервые запрос вызывается, он удален от вашего прямого маршрутизатора

Вот что я предлагаю:

  1. сервер CRE ates "azjzso1291084JKioaio1" для qrcode
  2. ваш модуль хранит этот qrcode либо в базе данных, либо в памяти в вашем модуле, например. var qrcodes = {}; qrcodes["azjzso1291084JKioaio1"] = {some: 'object'};
  3. ваш 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 дважды, второй раз терпит неудачу. Так вы намереваетесь работать, если я не ошибаюсь.

+0

Проблема заключается не в создании qrcode. Сервер должен генерировать случайную переменную типа «azjzso1291084JKioaio1», перенаправлять qrcode на localhost/azjzso1291084JKioaio1. Мне нужно «создать» маршрут, когда пользователь нажимает на ссылку. Я не знаю, могу ли я понять .... – Arwinne1

+0

@ Arwinne1 да, я понимаю вашу проблему. Но экспресс не работает таким образом. То, как вы должны это делать, это создать случайную переменную в вашем модуле, а затем, когда кто-то запросит путь с шаблоном, который вы ожидаете, вы используете свой модуль для проверки временной случайной переменной, а затем разрешите прохождение этого запроса. –

+0

Я понимаю немного x) как я сказал, что я не rambo. Я не знаю, как это сделать. У меня был поиск в Интернете без каких-либо успехов! – Arwinne1