javascript - 这是我收到的错误错误 [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
问题描述
错误:
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at ServerResponse.setHeader (_http_outgoing.js:535:11)
at ServerResponse.header (C:\Users\Abubakar\Desktop\Desktop Docs\Full Stack Web Devop Data\FPLatest\FinalFullstack\node_modules\express\lib\response.js:771:10)
at ServerResponse.send (C:\Users\Abubakar\Desktop\Desktop Docs\Full Stack Web Devop Data\FPLatest\FinalFullstack\node_modules\express\lib\response.js:170:12)
at ServerResponse.json (C:\Users\Abubakar\Desktop\Desktop Docs\Full Stack Web Devop Data\FPLatest\FinalFullstack\node_modules\express\lib\response.js:267:15)
at C:\Users\Abubakar\Desktop\Desktop Docs\Full Stack Web Devop Data\FPLatest\FinalFullstack\API\Routes\Signuproutes.js:109:13
at C:\Users\Abubakar\Desktop\Desktop Docs\Full Stack Web Devop Data\FPLatest\FinalFullstack\node_modules\mongoose\lib\model.js:4876:16
at C:\Users\Abubakar\Desktop\Desktop Docs\Full Stack Web Devop Data\FPLatest\FinalFullstack\node_modules\mongoose\lib\helpers\promiseOrCallback.js:16:11
at C:\Users\Abubakar\Desktop\Desktop Docs\Full Stack Web Devop Data\FPLatest\FinalFullstack\node_modules\mongoose\lib\model.js:4899:21
at C:\Users\Abubakar\Desktop\Desktop Docs\Full Stack Web Devop Data\FPLatest\FinalFullstack\node_modules\mongoose\lib\model.js:493:16
at C:\Users\Abubakar\Desktop\Desktop Docs\Full Stack Web Devop Data\FPLatest\FinalFullstack\node_modules\kareem\index.js:246:48
at next (C:\Users\Abubakar\Desktop\Desktop Docs\Full Stack Web Devop Data\FPLatest\FinalFullstack\node_modules\kareem\index.js:167:27)
at next (C:\Users\Abubakar\Desktop\Desktop Docs\Full Stack Web Devop Data\FPLatest\FinalFullstack\node_modules\kareem\index.js:169:9)
at Kareem.execPost (C:\Users\Abubakar\Desktop\Desktop Docs\Full Stack Web Devop Data\FPLatest\FinalFullstack\node_modules\kareem\index.js:217:3)
at _handleWrapError (C:\Users\Abubakar\Desktop\Desktop Docs\Full Stack Web Devop Data\FPLatest\FinalFullstack\node_modules\kareem\index.js:245:21)
at _cb (C:\Users\Abubakar\Desktop\Desktop Docs\Full Stack Web Devop Data\FPLatest\FinalFullstack\node_modules\kareem\index.js:304:16)
at C:\Users\Abubakar\Desktop\Desktop Docs\Full Stack Web Devop Data\FPLatest\FinalFullstack\node_modules\mongoose\lib\model.js:344:9
Emitted 'error' event on Function instance at:
at C:\Users\Abubakar\Desktop\Desktop Docs\Full Stack Web Devop Data\FPLatest\FinalFullstack\node_modules\mongoose\lib\model.js:4878:13
at C:\Users\Abubakar\Desktop\Desktop Docs\Full Stack Web Devop Data\FPLatest\FinalFullstack\node_modules\mongoose\lib\helpers\promiseOrCallback.js:16:11
[... lines matching original stack trace ...]
at C:\Users\Abubakar\Desktop\Desktop Docs\Full Stack Web Devop Data\FPLatest\FinalFullstack\node_modules\mongoose\lib\model.js:344:9
at C:\Users\Abubakar\Desktop\Desktop Docs\Full Stack Web Devop Data\FPLatest\FinalFullstack\node_modules\kareem\index.js:135:16
at processTicksAndRejections (internal/process/task_queues.js:79:11) {
code: 'ERR_HTTP_HEADERS_SENT'
代码:
const express=require('express');
const router=express.Router();
require("dotenv").config()
const user = require('..//Models/User.js')
const Posts=require('../Models/Posts')
const comments=require('../Models/comments')
const bcrypt=require('bcrypt')
const jwt=require("jsonwebtoken")
const mongoose=require('mongoose')
mongoose.connect("mongodb://localhost:27017/useres23213s",{useCreateIndex: true,useNewUrlParser: true,useUnifiedTopology: true})
//Getting All Users
router.get('/Users',async(req,res,next)=>{
await user.find(function(err,user){
if(err)
throw err
res.json(user)
})
res.setHeader('Content-Type','application/json');
});
//Getting All Blogs
router.get('/GetBlogs',(req,res,next)=>{
Posts.find(function(err,Posts){
if(!err){
res.json(Posts)
}})
});
//Sign Up User
router.post('/Users',(req,res)=>{
let newuser=new user( {
name:req.body.name,
email:req.body.email,
password:req.body.password,
});
if(!req.body.name || !req.body.email || !req.body.password){
res.json("Please fill the Credentials")
res.end()
return
}
user.findOne({name:req.body.name},(err,User)=>{
if(User)
{
res.json("User Name Already Registered")
res.end()
return
}
})
user.findOne({email:req.body.email},(err,User)=>{
if(User)
{
res.json("Email Already Registered")
res.end()
return
}
})
newuser.save((err,user)=>
{
if (err)
{
res.json({msg:' Failed adding User in Database'});
res.end()
throw err
return
}
else
{
res.json({msg:' User added in Database'});;
res.end()
}
})
});
process.env.SecretKey="SecretKey"
//User Login
router.post('/Login',(req,res)=>{
if(!req.body.password || !req.body.name){
return res.json({success:false,msg:"Please Fill the Credentials"})
}
user.findOne({name:req.body.name},(err,User)=>{
if(err || !User){
return res.json({success:false,msg:"Username not Registered"})
}
else
{
if(req.body.password!=User.password)
{
return res.json({success:false,msg:"Password Invalid"})
}
const payload={
id:User._id,
email:User.email,
Username:User.Username,
}
date=Date.now()
token=jwt.sign({payload},process.env.SecretKey,(err,token)=>{
res.json({success:true,msg:"User Logged in",token,Userid:{Userid:User.email},UserloggedIn:{UserloggedIn:date}})
})
}
})
})
router.post('/postcomment',(req,res)=>{
let newcomment=new comments({
commentBody:req.body.commentBody,
commentCreatedBy:req.body.commentCreatedBy,
Posttitle:req.body.Posttitle
})
if(!req.body.commentBody){
res.json({success:false,msg:"Enter Comment Body"})
return
}
//Posting a comment
newcomment.save((err,comment)=>{
if(err)
{
res.json({success:false,msg:"Error in Posting Comment"})
throw err
return
}
else
{
res.json({success:true,msg:"Comment Posted..",comment})
}
})
})
//Creating a Post/Blog/Question
router.post('/CreatePost',(req,res)=>{
let newpost=new Posts({
title:req.body.title,
Body:req.body.Body,
CreatedBy:req.body.CreatedBy,
Createdat:req.body.Createdat,
})
if(!req.body.title)
{
res.json({
success:false,
msg:"Post Must have A title"
})
return
}
if(!req.body.Body){
res.json({
success:false,
msg:"Post Must have A title"
})
return
}
newpost.save((err,post)=>{
if(!err)
{
res.json(
{success:true,
msg:"Post Saved"}
)
}
else
throw err
return
})
res.json({
success:true,
msg:"Posted.."
})})
module.exports=router;
解决方案
看起来这部分是导致错误的原因
router.get('/Users',async(req,res,next)=>{
await user.find(function(err,user){
if(err)
throw err
res.json(user)
})
res.setHeader('Content-Type','application/json');
});
我看到这部分有几个问题:-
- 你不需要 async/await 因为你提供回调。如果你想使用 async/await 我建议重构。
if(err)
如果要避免运行其余代码并且throw err
需要返回语句,则需要位于同一行。res.json(user)
在这之前正在执行的主要问题res.setHeader()
就是您收到错误的原因。application/json
如果您正在使用,您也不需要将标题设置为res.json()
所以沿着这些思路的东西应该工作
router.get('/Users', ( req, res )=>{
// i am assuming that's how the model works to get all users. change if needed
user.find({}, function(err, users){
if(err) throw new Error(err)
res.json(users)
})
});
希望这可以帮助!
推荐阅读
- c# - 添加轻量级渲染管道时对象图形混乱
- c - 如何比较字符串中的各个元素?
- android - 您的 CPU 不支持所需的功能(VT-x 或 SVM)
- mongodb - 如何有效地检查 Scala 的 MongoDB 集合是否为空?
- reactjs - 让 Storybook react-docgen-typescript-loader 使用 typescript 道具
- packer - Azure Devops Packer 构建代理(为 Packer 创建的临时资源组定义 Vnet IP 范围以获取快照))
- cordova - “cordova run android”突然停止工作,以错误消息结束
- validation - 如何将电子邮件建议传递到 Azure AD B2C 注册页面
- android - 如何识别导致类或成员保留在android中的proguard规则?
- python - 在工作机器上运行同步的虚拟环境时遇到问题