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

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


当前回答

如果您正在使用ES6和Express,请尝试以下销毁方法:

const {id, since, fields, anotherField} = request.query;

在上下文中:

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

app.get('/', function(req, res){
   const {id, since, fields, anotherField} = req.query;
});

app.listen(3000);

也可以在析构函数中使用默认值:

//测试样品请求常量要求={查询:{id:'123',字段:[a','b','c']}}常量{身份证件,since=new Date().toString(),字段=['x'],anotherField='默认'}=请求查询;console.log(id,since,fields,anotherField)

其他回答

这里有很多关于使用request.query访问查询的答案,但是没有人提到它的类型怪癖。查询字符串类型可以是字符串或数组,此类型由用户控制。

例如,使用以下代码:

const express = require("express");
const app = express();

app.get("/", function (req, res) {
  res.send(`Your name is ${(req.query.name || "").length} characters long`);
});

app.listen(3000);

请求/?name=bob将返回您的姓名长3个字符,但请求/?name=bob&name=jane将返回您的名字有2个字符长,因为参数现在是一个数组['bob','jane']。

Express提供了两个查询解析器:简单的和扩展的,它们都将为您提供字符串或数组。我个人认为,应该重写解析器,使其具有一致的类型:所有数组或所有字符串,而不是检查方法的可能副作用或验证类型。

const express = require("express");
const app = express();

const querystring = require("querystring");

// if asArray=false only the first item with the same name will be returned
// if asArray=true all items will be returned as an array (even if they are a single item)
const asArray = false;
app.set("query parser", (qs) => {
  const parsed = querystring.parse(qs);
  return Object.entries(parsed).reduce((previous, [key, value]) => {
    const isArray = Array.isArray(value);
    if (!asArray && isArray) {
      value = value[0];
    } else if (asArray && !isArray) {
      value = [value];
    }

    previous[key] = value;
    return previous;
  }, {});
});

app.get("/", function (req, res) {
  res.send(`Your name is ${(req.query.name || "").length} characters long`);
});

app.listen(3000);

2014年5月4日更新

此处保留旧答案:https://gist.github.com/stefek99/b10ed037d2a4a323d638


1) 安装express:npm安装express

应用程序.js

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

app.get('/endpoint', function(request, response) {
    var id = request.query.id;
    response.end("I have received the ID: " + id);
});

app.listen(3000);
console.log("node express app started at http://localhost:3000");

2) 运行app:node app.js

3) 在浏览器中访问:http://localhost:3000/endpoint?id=something

我收到了ID:某物


(自从我的回答以来,很多事情都发生了变化,我相信这是值得的,让事情保持最新)

//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"}

})

白夸克反应很好。但在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'));
})

您可以使用

request.query.<varible-name>;