Node.js+Express实现POST请求报404错误,请问代码哪里有问题?
问题排查与修复
1. 页面报Cannot GET 404的核心原因
浏览器直接访问地址时默认发送GET请求,你当前服务端仅定义了/addMovie路径的POST路由,没有对应访问路径的GET路由,同时你配置的静态资源目录node需要满足以下要求:
- 你的客户端HTML/JS文件必须放在项目根目录下的
node文件夹内 - 入口页面文件名必须为
index.html,否则访问时需要带上完整文件名,比如http://localhost:8000/xxx.html
如果不想用静态资源中间件,也可以手动加根路径的GET路由返回页面:
app.get('/', (req, res) => { res.sendFile(__dirname + '/你的页面路径.html') })
2. 服务端POST路由缺失响应
当前addMovie处理函数仅处理了数据存储,没有给客户端返回响应,会导致客户端请求超时,修改如下:
function addMovie(req, res){ data.push(req.body); console.log(data); // 新增返回响应 res.json({ code: 200, msg: '添加成功', data: req.body }) };
3. 客户端代码变量名错误
postData函数的参数名为大写URL,但fetch调用时用的是小写url,变量不匹配会抛出未定义错误,修改如下:
const postData = async(url = '', data= {})=>{ // 参数名统一为小写url console.log(data); const response = await fetch(url, { method: 'POST', // 请求方法按规范改为大写 credentials: 'same-origin', headers: {'Content-Type': 'application/json'}, body: JSON.stringify(data), }); try{ const newData = await response.json(); console.log(newData); return newData }catch(error){ console.log("error", error); } } postData('/addMovie', {movie: 'Dark Knight', score: 5});
内容的提问来源于stack exchange,提问作者H-Dahab
相关产品推荐
相关产品推荐

