我需要创建要接受数组的url的url,如何在node.js/express中提取数组来自请求?

Pao*_*aJ. 22 node.js express

我需要创建要接受数组的url的url,如何在node.js/express中提取数组来自请求?我需要传递一个数组,其名称是我需要从Person返回的参数

model.

/api/person # here I need to pass which fields I want to see but to be generic.
Run Code Online (Sandbox Code Playgroud)

Kev*_*lly 38

一种选择是使用JSON格式.

http://server/url?array=["foo","bar"]
Run Code Online (Sandbox Code Playgroud)

服务器端

var arr = JSON.parse(req.query.array);
Run Code Online (Sandbox Code Playgroud)

或者你自己的格式

http://server/url?array=foo,bar
Run Code Online (Sandbox Code Playgroud)

服务器端

var arr = req.query.array.split(',');
Run Code Online (Sandbox Code Playgroud)

  • 向其他人发出警告,JSON.parse将是脆弱的,并且在发送无效JSON的情况下需要try/catch ... (4认同)
  • 这不应该是最佳答案,因为 Express 支持将重复值转换为数组。您不应该使用 JSON 解析编写一次性实现 (2认同)

dur*_*rum 33

您可以使用百分比编码对数组进行编码,只需"覆盖"字段,正式连接值.

app.get('/test', function(req,res){
    console.log(req.query.array);
    res.send(200);
});




localhost:3000/test?array=a&array=b&array=c
Run Code Online (Sandbox Code Playgroud)

此查询将打印['a','b','c'].


Muh*_*abi 22

当在请求URL中重复多次查询参数时,Express会将查询参数公开为数组:

app.get('/', function(req, res, next) {
   console.log(req.query.a)
   res.send(200)
}

GET /?a=x&a=y&a=2:
// query.a is ['x', 'y', 'z']
Run Code Online (Sandbox Code Playgroud)

同样适用于其他方法中的req.body.

  • 这似乎是最有弹性的答案,但是您能否提供官方文档中的一些链接,该链接将其显示为内置功能而不是错误?据我所知,如果查询参数重复,其他服务器框架将覆盖该值 (2认同)

Jos*_*ato 10

使用下一个代码:

app.use('/', (req, res) => {
    console.log(req.query, typeof req.query.foo, Array.isArray(req.query.foo));
    res.send('done');
});
Run Code Online (Sandbox Code Playgroud)

在后端,您有两种标准方法.对于下一个请求:

  1. /?富= 1&富= 2
  2. /?FOO [] = 1&FOO [] = 2

您的NodeJS后端将接收下一个查询对象:

  1. {foo:['1','2']}'对象'是真的
  2. {foo:['1','2']}'对象'是真的

所以,你可以选择你想要的方式.我的建议是第二个,为什么?如果您期望一个数组并且您只传递一个值,那么选项1将把它解释为常规值(字符串)而不是数组.

[我说我们有两个标准并且不行,网址中的数组没有标准,这是存在的两种常见方式.每个Web服务器都以自己的方式执行它,如Apache,JBoss,Nginx等]


Dim*_*tri 6

如果要从 url 参数传递数组,则需要按照以下示例进行操作:

网址示例:

https://website.com/example?myarray[]=136129&myarray[]=137794&myarray[]=137792
Run Code Online (Sandbox Code Playgroud)

要从 express 中检索它:

console.log(req.query.myarray)
[ '136129', '137794', '137792' ]
Run Code Online (Sandbox Code Playgroud)