繁体   English   中英

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

[英]Pass string variable parameter node.js not express

我想知道您将如何使用node.js从类似请求的URL中解析一个字符串参数来表达。 我知道这可以通过express实现,但是我想知道如何在没有express的情况下使用node.js完成。

快递示例:

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

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

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

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

如果您使用的是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对象。

编辑:

正如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])
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM