传递字符串变量参数node.js不表达

Pass string variable parameter node.js not express

本文关键字:js node 参数 字符串 变量      更新时间:2023-09-26

我想知道如何使用node.js从类似于express的请求url中解析字符串参数。我知道这是可能的与快车,但我想知道它如何可以用node.js没有快车。

表达的例子:

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

如果您正在使用connect(或只是http模块),您可以使用RegExp:

  • With 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);
    ...
    
  • With 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对象,并选择一个适当的名称。

编辑:

正如robertklep在他的评论中指出的,你可以检查paramify。它的代码非常清晰,并且完成了我在答案的最后一部分中所说的一些事情。例如,您可以看到它有一个函数regify来动态地构造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])
    }
}

您可以从req中获得url属性并根据需要进行解析:

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

解析部分可以使用RegEx完成。