Javascript Axios POST请求有时仅起作用(MERN应用程序)
我的axios POST请求在70%的时间内有效。似乎没有一种模式在输入有效和无效之间(长度似乎无关紧要)。我试着阅读了所有有类似问题的stackoverflow问题,但没有任何效果Javascript Axios POST请求有时仅起作用(MERN应用程序),javascript,node.js,reactjs,mongodb,axios,Javascript,Node.js,Reactjs,Mongodb,Axios,我的axios POST请求在70%的时间内有效。似乎没有一种模式在输入有效和无效之间(长度似乎无关紧要)。我试着阅读了所有有类似问题的stackoverflow问题,但没有任何效果 onSubmit() { const newInput = { input_text: this.state.value, } instance.post('http://localhost:4000/inputs/add/', newInput) .then
onSubmit() {
const newInput = {
input_text: this.state.value,
}
instance.post('http://localhost:4000/inputs/add/', newInput)
.then(res => {
console.log(res.data);
})
.catch(error => {
if (error.response) {
console.log(error.response.data);
console.log(error.response.status);
console.log(error.response.headers);
}
});
};
在这段代码片段中,“instance”是我的axios实例,我已经对其应用了1000的超时(只是想看看这是否会有所不同)。我对请求应用了axios拦截器,试图更清楚地了解发生了什么,但行为与工作和非工作请求相同。这意味着,“请求已发送”被一致地记录,这意味着请求已发送,并且记录的配置在工作和非工作请求之间看起来相似
instance.interceptors.request.use(function (config) {
console.log("request was sent");
console.log(config);
return config;
}, function (error) {
console.log(error);
return Promise.reject(error);
});
配置看起来像什么:
{
url: "http://localhost:4000/inputs/add/",
method: "post",
data: {…},
headers: {…},
transformRequest: Array(1),
…
}
adapter: ƒ xhrAdapter(config)
data: {
input_text: "l"
}
headers: {
common: {…},
delete: {…},
get: {…},
head: {…},
post: {…},
…
}
maxContentLength: -1
method: "post"
timeout: 1000
transformRequest: [ƒ]
transformResponse: [ƒ]
url: "http://localhost:4000/inputs/add/"
validateStatus: ƒ validateStatus(status)
xsrfCookieName: "XSRF-TOKEN"
xsrfHeaderName: "X-XSRF-TOKEN"
__proto__: Object
我相当肯定,在非工作实例中,请求甚至不会到达后端。这是因为在我的后端路由的下面的代码片段中,非工作实例不记录任何内容,而工作实例同时记录“This worked”和“finished”
奇怪的是,一旦我把拦截器放进去,POST请求实际上开始更频繁地工作。。。仅供参考,该请求在邮递员身上100%有效。我实现的错误捕获似乎没有一个被命中,也没有任何记录
如果有人对进一步调试方法有任何建议,或者有人知道此问题的解决方案,我将不胜感激。我把debuggers/console.log语句放得到处都是,没有结果,我也没有主意。谢谢 用try/catch将express route函数的前两行换行。如果在那里出错,路由将永远不会返回响应,并且在请求超时之前,您不会看到控制台中的输出。这将是我的guessconsole.log(“started”),位于路由内的第一行,用于检查所有请求是否命中。我尝试了您的建议,但没有任何帮助:(将express route函数的前两行包装在try/catch中。如果在那里出错,则路由将永远不会返回响应,并且在请求超时之前,您不会在控制台中看到输出。这将是my guessconsole.log(“已启动”)在路由的第一行中,检查所有请求是否命中。我尝试了您的建议,但没有任何帮助:(
inputRoutes.route('/add').post(function(req, res) {
req.body.input_output = processor.processText(req.body.input_text);
let input = new Input(req.body);
input.save()
.then(todo => {
res.status(200).json({'input': 'input added successfully'});
console.log("this worked");
})
.catch(err => {
res.status(400).send('adding new input failed');
console.log("this didn't work");
});
console.log("finished");
});