可以't在发送标头后设置标头.调用create(data,cb)时

Can't set headers after they are sent. While calling create(data,cb)

本文关键字:create 调用 data cb 设置 可以      更新时间:2023-09-26

我是节点的新手,正在尝试在mongodb中创建一个模型。当我调用localhost:3000/a时。我在控制台中看到两次请求也出现错误。在发送后无法设置标题

module.exports = function(app) {
  app.get('/',function(req,res){
    res.render("adminpanel/panel",{});
  });
  app.get('/a',function (req,res,cb) {
    console.log(req.url)
    var User = app.models.test;
    var user = app.models.test();
    user.username = "admin";
    user.type = "hey";
    user.password = "132";
    user.email = "admin@test.com";
    User.create(user,cb);
    res.send("hey");
  });
};
输出:
output: 
  /a
  /a
  Error: Can't set headers after they are sent.
    at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:344:11)
    at ServerResponse.header (E:'workspace'orderapp'node_modules'express       'lib'response.js:718:10)
    at ServerResponse.contentType (E:'workspace'orderapp'node_modules'express'lib'response.js:551:15)
    at ServerResponse.send (E:'workspace'orderapp'node_modules'express'lib'response.js:138:14)
    at E:'workspace'orderapp'server'boot'root.js:14:9
    at Layer.handle [as handle_request] (E:'workspace'orderapp'node_modules'express'lib'router'layer.js:95:5)
    at next (E:'workspace'orderapp'node_modules'express'lib'router'route.js:131:13)
    at Route.dispatch (E:'workspace'orderapp'node_modules'express'lib'router'route.js:112:3)
    at Layer.handle [as handle_request] (E:'workspace'orderapp'node_modules'express'lib'router'layer.js:95:5)
    at E:'workspace'orderapp'node_modules'express'lib'router'index.js:277:22

当您完成请求,然后尝试在同一请求上发送更多时,就会发生错误。这种情况通常发生在有人在异步处理中犯了错误,从而混淆了在请求对象上发送东西的时间。

我发现您的代码有两个问题。首先,您试图从路由处理程序调用next(),就好像您实际上还没有完成对请求的处理一样。其次,在调用next()之前发送res.send(),因为User.create()是异步的,稍后会完成。

我建议你使用这个:

  app.get('/a',function (req,res) {
    console.log(req.url)
    var User = app.models.test;
    var user = app.models.test();
    user.username = "admin";
    user.type = "hey";
    user.password = "132";
    user.email = "admin@test.com";
    User.create(user,function() {
        res.send("hey");
    });
  });