Node.js POST提交表单遇304错误,页面持续加载无响应求助
Node.js POST表单提交后页面无响应+304错误的解决方案
核心问题与修复方案
1. 数据库连接回调参数缺失
app.js中db.connect的回调未接收err参数,导致代码报错err is not defined,数据库连接逻辑异常,后续操作无法正常执行。
修复后的代码:
db.connect((err)=>{ // 补充err参数 if(err) console.log("Connection Error"+err); else console.log("Database Connected"); })
2. addProduct函数语法错误(try/catch未闭合)
product-helpers.js中addProduct的try块未正确闭合,catch语句不在try范围内,导致函数语法错误,无法触发回调,请求因未收到响应持续挂起。同时MongoDB插入结果的ID属性是insertedId,原代码写错为_insertedId。
修复后的代码:
addProduct: async (product, callback) => { try { console.log('Adding product:', product); const db = await connect(); const collection = db.collection('products'); const data = await collection.insertOne(product); console.log('Product added'); callback(data.insertedId); // 修正ID属性名 } catch(err) { console.error('Failed to add product:', err); callback(null, err); // 回调传递错误信息 } },
3. 文件上传路径错误
admin.js中用__dirname(当前routes目录)拼接路径,导致图片上传到routes/public/product-images,而实际public目录在项目根目录,图片无法保存触发错误。
修复后的代码:
// 加../回到项目根目录,指向正确的public文件夹 const uploadPath = path.join(__dirname, '../public/product-images', `${id}.jpg`);
4. 回调逻辑未处理错误
admin.js的POST路由未处理addProduct的错误情况,若数据库操作失败,请求会因无响应持续加载。
修复后的代码:
router.post('/add-product',function(req,res){ productHelpers.addProduct(req.body,(id, err)=>{ if(err){ console.error(err); return res.send("添加商品失败"); } if(!req.files?.Image){ // 检查是否有上传文件 return res.redirect('/admin'); } let image=req.files.Image const uploadPath = path.join(__dirname, '../public/product-images', `${id}.jpg`); image.mv(uploadPath, (err) => { if(!err){ res.redirect('/admin') }else{ console.error(err); res.send("图片上传失败") } }) }) })
304错误说明
304是浏览器缓存命中的状态码,你的情况本质是请求未被正确处理,浏览器重复请求触发缓存。解决上述代码错误后,请求能正常完成,304问题会随之消失。
内容的提问来源于stack exchange,提问作者Sohith K S
相关产品推荐
相关产品推荐

