如何解决 HTTP header 错误,而状态 200 ok 在 API 测试中使用 postman 显示?

How to solve HTTP header error, while status 200 ok shows in API testing using postman?

大家好我是这个 angular 领域的新手,我在学习时遇到了一些问题。我一直在关注 youtube 上的教程,并试图与他一样,只是做了一些修改。当我这样做的时候,我可以看到我的 get API 在我使用 Postman 进行测试时工作正常,我的 post API 也可以使用 Postman 工作文件,但是,当我连接前端应用程序时后端并将数据发送到 mondoDB,但它抛出了一个错误 code: 'ERR_HTTP_HEADERS_SENT' 。我可能知道这个问题已经被问了很多,但是 none 的答案适合我的情况,因为自过去

以来有许多不同的语法

请参阅文档的 link,其中包含我所有代码的详细屏幕截图以及数据。

请告诉我这里有什么问题?为什么会出现这个错误? 预先感谢所有专家的帮助和建议。

Link: to see all screenshots of codes please click the link

非常感谢专家,非常感谢您的帮助。

    const express = require ('express');
const app = express();
const bodyParser = require('body-parser');

const cors = require("cors");

const mongoose = require('./database/mongoose');
const User = require('./database/models/user');


/*
install CORS: Cross Origin Request Security
This is basically used to run two ports on same server, 
i.e Front-End: running on localhost:4200 which is using angular framework
BackEnd: localhost: running on 3000- backend api using nodejs, express
*/
app.use(bodyParser.json());
app.use(cors());

app.use ((req, res, next) =>{
  res.header("Access-Control-Allow-Orgin", "*");
  res.header("Access-Control-Allow-Methods", "GET, POST, HEAD, OPTIONS, PATCH< DELETE" );
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
  
});

// app.use(express.json());
// app.get('/user', (req, res) => {
  //     person.find({})
  //     .then(user => res.send(user))
  //     .catch ((error) => console.log(error));
  // })
  app.get('/register', (req, res)=> {
      res.send("hello world");
  });


  app.post('/register', (req, res) => {
      console.log(req.body)
    // (new User ({
    //   'firstname': req.body.firstname,
    //   'lastname': req.body.lastname,
    //   'email': req.body.email,
    //   'password': req.body.password
    // }))

    // .save()
    // .then((user) => res.send(user))
    //  .catch((error) => console.log(error));
    const firstname = req.body.firstname;
    const lastname = req.body.lastname;
    const email = req.body.email;
    const password = req.body.password;
    
    
    const user = new User();
    user.firstname = firstname;
    user.lastname = lastname;
    user.email = email;
    user.password = password;
    
    user.save((err, result ) => {
      if(err){   
        console.log("There is error adding user to database");
        res.send({success: "Failed to add user to database", status: 500});
      }else {
        res.send({success: "User has been added to database", status: 200});
      } 
      
    })
    
  });
  
  
  app.listen(3000, () => console.log("Server is Connected to port 3000"));

错误输出如下

 {
      firstName: 'kunal',
      lastName: 'patel',
      email: 'kunal@kare.ie',
      password: '123454'
    }
    There is error adding user to database
    C:\Users\tapesh.patel\Desktop\Website\Kare-app\BackEnd\node_modules\mongoose\lib\helpers\promiseOrCallback.js:19
                throw error;
                ^

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at ServerResponse.setHeader (_http_outgoing.js:526:11)
    at ServerResponse.header (C:\Users\tapesh.patel\Desktop\Website\Kare-app\BackEnd\node_modules\express\lib\response.js:771:10)
    at ServerResponse.send (C:\Users\tapesh.patel\Desktop\Website\Kare-app\BackEnd\node_modules\express\lib\response.js:170:12)
    at ServerResponse.json (C:\Users\tapesh.patel\Desktop\Website\Kare-app\BackEnd\node_modules\express\lib\response.js:267:15)
    at ServerResponse.send (C:\Users\tapesh.patel\Desktop\Website\Kare-app\BackEnd\node_modules\express\lib\response.js:158:21)
    at C:\Users\tapesh.patel\Desktop\Website\Kare-app\BackEnd\app.js:68:20
    at C:\Users\tapesh.patel\Desktop\Website\Kare-app\BackEnd\node_modules\mongoose\lib\model.js:4891:16
    at C:\Users\tapesh.patel\Desktop\Website\Kare-app\BackEnd\node_modules\mongoose\lib\helpers\promiseOrCallback.js:16:11
    at C:\Users\tapesh.patel\Desktop\Website\Kare-app\BackEnd\node_modules\mongoose\lib\model.js:4914:21
    at C:\Users\tapesh.patel\Desktop\Website\Kare-app\BackEnd\node_modules\mongoose\lib\model.js:495:16
    at C:\Users\tapesh.patel\Desktop\Website\Kare-app\BackEnd\node_modules\kareem\index.js:246:48
    at next (C:\Users\tapesh.patel\Desktop\Website\Kare-app\BackEnd\node_modules\kareem\index.js:167:27)
    at next (C:\Users\tapesh.patel\Desktop\Website\Kare-app\BackEnd\node_modules\kareem\index.js:169:9)
    at Kareem.execPost (C:\Users\tapesh.patel\Desktop\Website\Kare-app\BackEnd\node_modules\kareem\index.js:217:3)   
    at _handleWrapError (C:\Users\tapesh.patel\Desktop\Website\Kare-app\BackEnd\node_modules\kareem\index.js:245:21) 
    at C:\Users\tapesh.patel\Desktop\Website\Kare-app\BackEnd\node_modules\kareem\index.js:272:14
Emitted 'error' event on Function instance at:
\Website\Kare-app\BackEnd\node_modules\karee\Kare-app\BackEnd\node_modules\mongoose\lib\model.js:4893:13em\index.js:94:14)                         e\Kare-app\BackEnd\node_modules\mongoose\lib\helpers\promiseOrCallback.js:
    at C:\Users\tapesh.patel\Desktop\Website\Kare-app\BackEnd\node_modules\kareem\indee ...]x.js:507:38                                e\Kare-app\BackEnd\node_modules\kareem\index.js:272:14
    at processTicksAndRejections (internal/\Website\Kare-app\BackEnd\node_modules\kareem\index.js:94:14)process/task_queues.js:79:11) {            e\Kare-app\BackEnd\node_modules\kareem\index.js:507:38
  code: 'ERR_HTTP_HEADERS_SENT'            process/task_queues.js:79:11) {
}
[nodemon] app crashed - waiting for file changes before starting...                   anges before starting...
[nodemon] restarting due to changes...
[nodemon] starting `node app.js`
Server is Connected to port 3000
Database is connected

ERR_HTTP_HEADERS_SENT 每当您尝试设置响应 header 或尝试对响应执行某些操作时, 将响应发送回用户。

因此,在将响应发送回用户后,请检查您是否正在做任何事情。避免这种情况的一种方法是放置一个 return 语句(见下文),因为这可以避免该函数在您发送响应后意外地做进一步的事情。

return res.send({success: "User has been added to database", status: 200});

在您的情况下,客户端(邮递员)正确获得响应,但您的节点服务器正试图再次操作 res object,从而导致错误。如果您正在进行任何此类操作,请检查您的代码。尝试设置 return 语句。