无法从 Express.js PUT 路由获取,为什么?
Cannot GET from Express.js PUT route, why?
有什么理由不能从 Express.js router.put() 内部执行 GET 请求?
我有两条路线。完全相同的 api 调用在 router.get() 路由中工作并在 router.put().
中挂起
我已经确认
这个有效:
router.get('/:id', async (req, res) => {
const { headers } = req;
let result;
try {
result = await axios({ method:'get', url: '/some-url', headers });
} catch(error) {
res.status(500).send(new Error('myError');
}
res.send({ result });
});
这不起作用:
router.put('/:id', async (req, res) => {
const { headers } = req;
let result;
let finalResult;
try {
result = await axios({ method:'get', url: '/some-url', headers });
} catch(error) {
res.status(500).send(new Error('myError');
}
// logic based on the result of the above GET determines what the value of `finalResult`
finalResult = { some: 'data' };
res.send({ finalResult });
});
尽管 axios({ method:'get', url: '/some-url' })
在两条路线中完全相同,但它只适用于一条路线而不适用于另一条路线。
router.put()
路由总是挂了很久,最终Node输出:
Error: socket hang up, code: 'ECONNRESET', etc...
感谢任何帮助,我花了一天多的时间为此挠头。
不,快递中没有这样的东西。尝试从邮递员或 curl 发送 GET 请求,看看是否有响应。根本原因可能是您尝试发出的 get 请求无效,或者您发出 GET 请求的服务器可能已关闭。您可以运行跟随以验证
app.put('/',async (req, res) => {
let response = await axios.get('https://google.co.in');
console.log(response.data);
res.send({"works": "hello"});
});
我的问题的根本原因:
http Headers 有一个键 Content-Length
阻止 GET 调用正确解析。
由于这些 api 调用发生在 router.put() 回调中,Headers 有一个 Content-Length
指向有效负载的大小 "body"这是 PUT 开头的。
解法:
在 router.put() 中执行 GET 时,从我的 Headers 中删除 Content-Length
字段,这样 GET 就会拥有除 [=] 之外的所有其他 Headers 数据10=]
不幸的是,NodeJS 刚刚抛出了 Error: socket hang up
消息,该消息并没有很好地描述潜在的问题。
有什么理由不能从 Express.js router.put() 内部执行 GET 请求?
我有两条路线。完全相同的 api 调用在 router.get() 路由中工作并在 router.put().
中挂起我已经确认
这个有效:
router.get('/:id', async (req, res) => {
const { headers } = req;
let result;
try {
result = await axios({ method:'get', url: '/some-url', headers });
} catch(error) {
res.status(500).send(new Error('myError');
}
res.send({ result });
});
这不起作用:
router.put('/:id', async (req, res) => {
const { headers } = req;
let result;
let finalResult;
try {
result = await axios({ method:'get', url: '/some-url', headers });
} catch(error) {
res.status(500).send(new Error('myError');
}
// logic based on the result of the above GET determines what the value of `finalResult`
finalResult = { some: 'data' };
res.send({ finalResult });
});
尽管 axios({ method:'get', url: '/some-url' })
在两条路线中完全相同,但它只适用于一条路线而不适用于另一条路线。
router.put()
路由总是挂了很久,最终Node输出:
Error: socket hang up, code: 'ECONNRESET', etc...
感谢任何帮助,我花了一天多的时间为此挠头。
不,快递中没有这样的东西。尝试从邮递员或 curl 发送 GET 请求,看看是否有响应。根本原因可能是您尝试发出的 get 请求无效,或者您发出 GET 请求的服务器可能已关闭。您可以运行跟随以验证
app.put('/',async (req, res) => {
let response = await axios.get('https://google.co.in');
console.log(response.data);
res.send({"works": "hello"});
});
我的问题的根本原因:
http Headers 有一个键 Content-Length
阻止 GET 调用正确解析。
由于这些 api 调用发生在 router.put() 回调中,Headers 有一个 Content-Length
指向有效负载的大小 "body"这是 PUT 开头的。
解法:
在 router.put() 中执行 GET 时,从我的 Headers 中删除 Content-Length
字段,这样 GET 就会拥有除 [=] 之外的所有其他 Headers 数据10=]
不幸的是,NodeJS 刚刚抛出了 Error: socket hang up
消息,该消息并没有很好地描述潜在的问题。