2015-08-11 2 views
0

Мне было интересно, как вы будете использовать node.js для синтаксического анализа строкового параметра из URL-адреса запроса, аналогичного выражению. Я знаю, что это возможно с помощью выражения, но я хотел бы знать, как это можно сделать с помощью node.js без выражения.Пропустить переменную string параметр node.js не выразить

Экспресс пример:

var app = require('express')(); 
app.get('sample/request/url/:id', function(req, res) { 
    var parameter = req.params.id; 
}); 
+0

Когда речь идет о разборе Params URL, Экспресс делает все тяжелое здесь , Вы должны изучить модуль [Query String] (https://nodejs.org/api/querystring.html), чтобы создать аналогичный механизм. –

+1

Проверьте ['paramify'] (https://github.com/hij1nx/paramify). – robertklep

ответ

0

Если ваш используете connect (или просто http модуль), вы можете использовать RegExp:

  • С http:

    var http = require('http'); 
    
    http.createServer(function (req, res) { // Note there's no next here 
        var match = req.url.match(/^sample\/request\/url\/(.+)$/); 
        var id = match ? match[1] : null; 
    }).listen(3000); 
    
    ... 
    
  • connect С:

    var connect = require('connect'); 
    
    connect.createServer(funcion(req, res, next) { 
        var match = req.url.match(/^sample\/request\/url\/(.+)$/); 
        var id = match ? match[1] : null; 
    }).listen(3000); 
    
    ... 
    

Это простой случай. Если вы хотите иметь свое собственное промежуточное программное обеспечение для маршрутизации, вы должны начать с массива RegExps (который может генерироваться динамически из добавленного вами String) и прокручивать их до тех пор, пока вы не найдете совпадение.

Каждый элемент маршрута должен иметь свой RegExp, а также его параметры, так что, как только вы найдете совпадение, вы можете извлечь и добавить параметры к объекту req с соответствующим именем, которое вы выберете.

EDIT:

Как robertklep отметил в своем комментарии, вы можете проверить paramify. Его code очень понятен и делает некоторые из вещей, которые я сказал в последней части ответа. Например, вы можете видеть, что это имеет функцию regify чтобы динамически contruct в RegExps и петлю для извлечения параметров матча:

var params = [] 

for (var i = 1; i < matches.length; i++) { 
    var key = reg.keys[i - 1] 
    if (key) { 
     params[key.name] = matches[i] 
    } else { 
     params.push(matches[i]) 
    } 
} 
0

Вы можете получить url свойство от req и разобрать, как вы хотите:

var server = require('http').createServer(function (req, res) { 
    console.log(req.url); 
    // would log "/sample/request/url/123" 
}); 

разбора часть может быть сделано с помощью RegEx.

Смежные вопросы