如何在 Express JS 中解码 URI 参数

问题描述 投票:0回答:2

我尝试使用 ajax 向我的节点快速路由发送 GET 请求,但我不知道如何解码 URI 参数。

这是发送到请求 GET /exercises/Day%201 的内容。

我想解码它,所以它会像 --> 第一天

那么我的查询将类似于

const program = await Program.findOne({ user: req.user.id })
.populate({
  path: 'exercises',
  match: { dayOfWeek: Day 1 }
})
.exec();

JS文件

$('#dayOfWeek').on('change', function() {
const dayOfWeek = $('#dayOfWeek').val();
const encoded = encodeURI(dayOfWeek);
$.ajax({
  type: 'GET',
  url: `/exercises/${encoded}`,
  dataType: 'json'
}).done((programs) => {
    console.log(programs);
  });
});

路线文件

router.get('/:dayOfWeek', async (req, res) => {
try {
const dow = req.params.dayOfWeek;
const program = await Program.findOne({ user: req.user.id })
  .populate({
    path: 'exercises',
    match: { dayOfWeek: dow }
  })
  .exec();
//.lean();
  res.send(program);
} 

谢谢大家的帮助。

node.js ajax express
2个回答
0
投票

您可以使用decodeURI()来解码URI

const uri = 'https://google.com/a%20%201';
console.log(uri);
console.log(decodeURI(uri));

// OUTPUT
https://google.com/a%20%201
https://google.com/a  1

0
投票

在express.js v4中,路径和查询参数已经解码。来自

req.params
文档

注意:Express 自动解码 req.params 中的值(使用decodeURIComponent)。

所以你的路线文件是正确的并且应该可以工作。

关于带有ajax调用的JS文件,我会使用

encodeURI
而不是
encodeURIComponent
来转义
/
也是如此。请参阅相关帖子我应该使用encodeURI还是encodeURIComponent来编码URL?

© www.soinside.com 2019 - 2024. All rights reserved.