我尝试使用 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);
}
谢谢大家的帮助。
您可以使用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
在express.js v4中,路径和查询参数已经解码。来自
req.params
文档:
注意:Express 自动解码 req.params 中的值(使用decodeURIComponent)。
所以你的路线文件是正确的并且应该可以工作。
关于带有ajax调用的JS文件,我会使用
encodeURI
而不是encodeURIComponent
来转义
/
也是如此。请参阅相关帖子我应该使用encodeURI还是encodeURIComponent来编码URL?