我遇到使用express创建的NodeJS REST api的问题。 我有两个电话,一个get和一个帖子设置如下:
router.get('/:id', (request, response) => {
console.log(request.params.id);
});
router.post('/:id', (request, response) => {
console.log(request.params.id);
});
现在,我希望ID能够包含特殊字符(UTF8)。 问题是,当我使用邮递员来测试请求时,看起来它们的编码方式非常不同:
GET http://localhost:3000/api/â
输出â
POST http://localhost:3000/api/â
输出â
有谁知道我在这里缺少什么?
我必须提一下,帖子调用还包含文件上传,因此内容类型将为multipart/form-data
答案 0 :(得分:1)
您应该在客户端对您的URL进行编码并在服务器上对其进行解码。请参阅以下文章:
对于JavaScript,encodeURI
可能派上用场。
答案 1 :(得分:0)
Does anyone have any idea what I am missing here?
是的,它没有输出â
,它会输出â
,但无论你在检查结果的时候,都认为你正在阅读别的东西(iso-8859-1
也许?) ,而不是UTF-8,并将其呈现为â
最有可能的是,您在Web浏览器中查看结果,并且Web服务器发送了错误的Content-Type
标头。尝试header("Content-type: text/plain;charset=utf-8");
或header("Content-type: text/html;charset=utf-8");
,然后您的浏览器应该正确呈现您的â
。
答案 2 :(得分:0)
似乎邮递员使用UTF-8编码,但没有正确的url编码。因此,您在请求url框中键入的内容将与您在浏览器中键入该URL的内容有所不同。
我正在请求:GET localhost/ä
,但它在网上将其编码为localhost/ä
(这现在是无效的URL,因为它包含非ASCII字符)
但是当我在Google chrome中输入localhost/ä
时,它会将请求正确编码为localhost/%C3%A4
因此,您可以尝试将请求的网址手动编码为http://localhost:3000/api/%C3%A2
我认为这是一个错误(也许是回归)。我正在MacOS上使用最新版本的PostMan v7.11.0。