📜  TypeError [ERR_UNESCAPED_CHARACTERS]:请求路径包含未转义的字符 (1)

📅  最后修改于: 2023-12-03 15:05:38.802000             🧑  作者: Mango

TypeError [ERR_UNESCAPED_CHARACTERS]: 请求路径包含未转义的字符

当我们使用 Node.js 发送 http 请求时,很容易遇到编码问题。如果请求路径中包含未转义的字符,会导致该错误。这通常是由 url 中包含特殊字符(如中文字符或空格)或非英文数字造成的。

const http = require('http');

const options = {
  hostname: 'www.example.com',
  port: 80,
  path: '/search?keyword=未转义的字符',
};

const req = http.request(options, (res) => {
  console.log(`statusCode: ${res.statusCode}`);
  res.on('data', (d) => {
    process.stdout.write(d);
  });
});

req.on('error', (error) => {
  console.error(error);
});

req.end();

此时会抛出以下错误:

TypeError [ERR_UNESCAPED_CHARACTERS]: Request path contains unescaped characters

为了解决这个问题,我们可以使用 encodeURI()encodeURIComponent() 函数对 url 进行编码。这些函数可以将 url 中的特殊字符转换为 URL 安全字符,从而避免该错误。

const http = require('http');

const options = {
  hostname: 'www.example.com',
  port: 80,
  path: `/search?keyword=${encodeURIComponent('未转义的字符')}`,
};

const req = http.request(options, (res) => {
  console.log(`statusCode: ${res.statusCode}`);
  res.on('data', (d) => {
    process.stdout.write(d);
  });
});

req.on('error', (error) => {
  console.error(error);
});

req.end();

在这里,我们使用 encodeURIComponent() 函数对特殊字符进行编码,以避免这个错误。

总结

当我们使用 Node.js 发送 http 请求时,需要注意请求路径中是否包含特殊字符。如果包含特殊字符,需要使用 encodeURI()encodeURIComponent() 函数对其进行编码,避免 TypeError [ERR_UNESCAPED_CHARACTERS] 错误的出现。