这是我第一次在这里发表问题,如果有数据丢失,请原谅。
我正试着做一些网络抓取来获取一些table的信息。页面只响应index.php,当我使用搜索表单时,它会向index.php发出POST?go=le with some formData.为了避免CORS问题,我用我自己的API在本地主机上运行。我把我的前端指向我的API,我得到了来自localhost的响应。没问题
我的问题出现在我尝试向我的API发出第二个请求时。第一个GET工作正常,但在响应之后,它一直失败。
当我重新启动服务器时,它再次工作,但只有一次。
这是我的API代码。我使用nodemon server.js
来启动我的服务器。
- server.js*
const express = require("express");
const axios = require("axios");
const scrape = require("scrape-it");
const FormData = require("form-data")
const cors = require("cors")
const app = express();
const PORT = process.env.PORT || 5000;
app.use(cors())
const config = {
headers: {
'Content-type': 'multipart/form-data'
},
}
app.get("/get-projects", async (req,res) => {
const testJSON = await axios.post(baseURL +"/index.php?go=le",formData,config)
.then(res => {
console.log("Post successfull...");
return res
}
)
.catch(err => {
console.log("Server error");
return err
}
);
if(testJSON && testJSON.data){
res.send({status: 200, data: testJSON.data});
}else{
res.status(508).send({status: 508, msg: "Unhandled Server Error", failedResponse: testJSON || "empty"})
}
})
app.listen(PORT,()=>console.log(`App running in port: ${PORT}`))
在我的前端,我只有一个按钮与事件,使一个得到我的API(http://localhost:5000)
这是我的fetch.js,包含在一个script标签中。没什么特别的
- fetch.js*
const btn = document.getElementById("btn-fetch-proyects")
const axios = window.axios
const fetchProjects = async () => {
console.log("Fetching...")
axios.get("http://localhost:5000/get-projects")
.then(res=>
console.log("The server responded with the following data: ",res.data)
)
.catch(err => console.log("Failed with error: ",err)
)
return null
}
btn.addEventListener("click",fetchProjects);
在我运行服务器的控制台中,我用这个err
对象获得Server error
:
{
"message": "socket hang up",
"name": "Error",
"stack": "Error: socket hang up\n at connResetException (internal/errors.js:607:14)\n at Socket.socketOnEnd (_http_client.js:493:23)\n at Socket.emit (events.js:327:22)\n at endReadableNT (internal/streams/readable.js:1327:12)\n at processTicksAndRejections (internal/process/task_queues.js:80:21)",
"config": {
"url": "http://186.153.176.242:8095/index.php?go=le",
"method": "post",
"data": {
"_overheadLength": 1216,
"_valueLength": 3,
"_valuesToMeasure": [],
"writable": false,
"readable": true,
"dataSize": 0,
"maxDataSize": 2097152,
"pauseStreams": true,
"_released": true,
"_streams": [],
"_currentStream": null,
"_insideLoop": false,
"_pendingNext": false,
"_boundary": "--------------------------935763531826714388665103",
"_events": {
"error": [
null,
null
]
},
"_eventsCount": 1
},
"headers": {
"Accept": "application/json, text/plain, */*",
"Content-Type": "multipart/form-data",
"User-Agent": "axios/0.21.1"
},
"transformRequest": [
null
],
"transformResponse": [
null
],
"timeout": 0,
"xsrfCookieName": "XSRF-TOKEN",
"xsrfHeaderName": "X-XSRF-TOKEN",
"maxContentLength": -1,
"maxBodyLength": -1
},
"code": "ECONNRESET"
}
我希望有人知道发生了什么。我试了一整天都解不出来。
我试着发布到其他网站,它工作正常。我觉得问题出在POST表单上。
感谢阅读!!!
2条答案
按热度按时间rkttyhzu1#
乍一看,我在前端代码中发现了一个错误。你在函数上使用
async
,但是你没有等待,而是使用.then
,尽量不要混淆样式,要么使用async/await
,要么使用.then .catch.
看看有没有帮助!:)
6yoyoihd2#
很明显插座挂了!使用节点unirest,它会关闭数据流。
希望这有帮助!