我正在使用来自以下URL的传入HTTP请求在Ubuntu上工作:http://<MY-IP>:3000/v1/projects/list
说明:
问题是我在终端中收到以下错误:
TypeError [ERR_UNESCAPED_CHARACTERS]: Request path contains unescaped characters
at new ClientRequest (_http_client.js:127:13)
at Object.request (https.js:300:10)
at Request.start (/home/dev/grem-api-dev/apiv3/node_modules/request/request.js:751:32)
at Request.end (/home/dev/grem-api-dev/apiv3/node_modules/request/request.js:1512:10)
at end (/home/dev/grem-api-dev/apiv3/node_modules/request/request.js:564:14)
at Immediate._onImmediate (/home/dev/grem-api-dev/apiv3/node_modules/request/request.js:578:7)
at processImmediate(timers.js:632:19)
在此错误节点进程从终端消失之后(但仍在工作并且API响应已正确发送),尽管我看不到它是否在工作(image attached)。因此,与节点进程进行交互的唯一方法是执行ps aux | grep node
或ps T
之类的操作并手动终止进程。假设错误含义是,我在错误出现的地方找到了一个适当的代码片段(request.js:751:32)。这里是:
try {
self.req = self.httpModule.request(reqOptions)
} catch (err) {
self.emit('error', err)
return
}
我来到的唯一解决方案是注释self.emit('error', err)
代码行,这显然不是最佳实践。事实是,相同的代码可在具有相同组件版本的其他计算机(Ubuntu,Windows)上运行,并且不会发生错误。 API端点(例如http://myIp:3000/v1/community/list)也可以在所有设备上正常工作。
这是我的组件版本:
一些代码片段(如果需要)(Express Server创建和ProjectsController中的特定路由):
const app = express();
app.use('/v1/projects/', ProjectsController);
const router = express.Router();
router.post('/list', function(req,res){
//logic
});
最佳答案
我已经使用axios
并发生了相同的问题。
我的问题已使用encodeURI()
或encodeURIComponent()
函数解决了。
const URI = 'example.com';
const encodedURI = encodeURI(URI);
PS :对于将来的读者:使用
require('url').URL
构造一个url对象并将其传递给node-fetch,它将为您自动转义url。有用链接:Link1 | Link2
关于node.js - TypeError [ERR_UNESCAPED_CHARACTERS]请求路径包含未转义的字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54025710/