我们可以在Node.js中获取查询字符串中的变量吗,就像在PHP中获取$_get中的变量一样?

我知道在Node.js中,我们可以获取请求中的URL。是否有获取查询字符串参数的方法?


当前回答

//get query&params in express

//etc. example.com/user/000000?sex=female

app.get('/user/:id', function(req, res) {

  const query = req.query;// query = {sex:"female"}

  const params = req.params; //params = {id:"000000"}

})

其他回答

在Express中,使用req.query。

req.params只获取路由参数,而不获取查询字符串参数。参见快车或帆船文档:

(req.params)检查路由参数,例如:/user/:id(req.query)检查查询字符串参数,例如:?id=12检查URL编码的主体参数(req.body),ex:id=12要使用url编码的请求体,req.body应该是一个对象。这可以通过使用_express.bodyParser中间件来完成。

也就是说,大多数时候,无论参数的来源如何,您都希望获得参数的值。在这种情况下,请使用req.param('fo')。注意,从Express 4开始,这已经被弃用:http://expressjs.com/en/4x/api.html#req.param

无论变量是在路由参数、查询字符串还是编码的请求体中,都将返回该参数的值。

附带说明-如果您的目标是获得所有三种类型的请求参数的交集(类似于PHP的$_request),您只需要将这些参数合并在一起——下面是我在Sails中如何设置的。请记住,path/route-parameters对象(req.params)具有数组财产,因此顺序很重要(尽管在Express4中可能会更改)

对于Express.js,您需要执行req.params:

app.get('/user/:id', function(req, res) {
  res.send('user' + req.params.id);    
});

白夸克反应很好。但在Node.js和Express.js的当前版本中,它还需要一行代码。确保添加“require-http”(第二行)。我在这里发布了一个更完整的示例,展示了此呼叫的工作原理。运行后,键入http://localhost:8080/?name=abel&fruit=apple在浏览器中,您将根据代码得到一个很酷的响应。

var express = require('express');
var http = require('http');
var app = express();

app.configure(function(){
    app.set('port', 8080);
});

app.get('/', function(req, res){
  res.writeHead(200, {'content-type': 'text/plain'});
  res.write('name: ' + req.query.name + '\n');
  res.write('fruit: ' + req.query.fruit + '\n');
  res.write('query: ' + req.query + '\n');
  queryStuff = JSON.stringify(req.query);
  res.end('That\'s all folks'  + '\n' + queryStuff);
});

http.createServer(app).listen(app.get('port'), function(){
    console.log("Express server listening on port " + app.get('port'));
})

既然您在标签中提到了Express.js,这里有一个Express特有的答案:使用req.query。

var express = require('express');
var app = express();

app.get('/', function(req, res){
  res.send('id: ' + req.query.id);
});

app.listen(3000);

您可以使用

request.query.<varible-name>;