javascript - nodejs 错误是发送后无法设置 header

标签 javascript node.js

您好,我遇到此错误,但我不明白为什么会出现该错误,请帮我解决它。

var fs = require("fs");
var port = 3000;

//Creating pool conection database
var mysql = require("mysql");

function ConnectDB()
{
    this.result = "r";
    this.conexion = mysql.createPool
    ({
        host: "localhost",
        user: "root",
        password: "rometotalwar2",
        database: "WebDatabase"
    });


    this.SignUpUser = function(nombre,apellidos,nick,pass,email,callback)
    {   

        var querystring = "SELECT Nickname,Correo from Users WHERE Nickname='"+nick+"' and Correo='"+email+"';";
        this.conexion.getConnection(function(err, connection)
        {   
            if(err)
            {
                
            }
            else
            {
                connection.query(querystring,function(err,result,fields)
                {
                    if(err)	
                    {
                    }
                    else
                    {                
                        if(result.length != 0)
                        {
                            callback("NO");
                        }
                        else
                        {
                            var querystring = "INSERT INTO Users VALUES(null,'"+nombre+"','"+apellidos+"','"+nick+"','"+pass+"','"+email+"','Comun','Activo');";
                            connection.query(querystring,function(err,result,fields)
                            {
                                if(err)
                                {
                                }
                            });
                        }
                    }
                });
                connection.release();
            }
        });
        
        callback();
    }
}

var express = require("express"); 
var path = require("path");
var bodyParser = require("body-parser");

var server = express();
server.use(express.static(path.join(__dirname, 'public')));
server.use(bodyParser.urlencoded({extended: true}));
server.use(bodyParser.json());

server.listen(port,function()
{
	console.log("Server listening at port: " + port);
});

server.post('/addUser',function(req,res,next)
{
    var nombre = req.body.nombre;
    var apellidos = req.body.apellido;
    var nickname = req.body.nickname;
    var email = req.body.email;
    var pass = req.body.pass;
    var conn = new ConnectDB()
    conn.SignUpUser(nombre,apellidos,nickname,pass,email,function(err)
    {
        var head,body,status;
        if(err == "NO")
        {
            head = "Error";
            body = "User alredy exits";
            status = 101;
        }
        else
        {
            head = "Ok";
            body = "User Register";
            status = 102;
        }
        
        res.send(body,head,status);
    });   
 });



server.use(function(req, res, next)
{
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

module.exports = server;

这是出现的错误:

/home/francisco/Documentos/ServerNodejs/node_modules/mysql/lib/protocol/Parser.js:82
        throw err;
              ^
Error: Can't set headers after they are sent.
    at ServerResponse.OutgoingMessage.setHeader (http.js:690:11)
    at ServerResponse.header (/home/francisco/Documentos/ServerNodejs/node_modules/express/lib/response.js:718:10)
    at ServerResponse.send (/home/francisco/Documentos/ServerNodejs/node_modules/express/lib/response.js:163:12)
    at /home/francisco/Documentos/ServerNodejs/server.js:100:13
    at Query._callback (/home/francisco/Documentos/ServerNodejs/server.js:40:29)
    at Query.Sequence.end (/home/francisco/Documentos/ServerNodejs/node_modules/mysql/lib/protocol/sequences/Sequence.js:96:24)
    at Query._handleFinalResultPacket (/home/francisco/Documentos/ServerNodejs/node_modules/mysql/lib/protocol/sequences/Query.js:144:8)
    at Query.EofPacket (/home/francisco/Documentos/ServerNodejs/node_modules/mysql/lib/protocol/sequences/Query.js:128:8)
    at Protocol._parsePacket (/home/francisco/Documentos/ServerNodejs/node_modules/mysql/lib/protocol/Protocol.js:274:23)
    at Parser.write (/home/francisco/Documentos/ServerNodejs/node_modules/mysql/lib/protocol/Parser.js:77:12)

最佳答案

当您在结果已发送后尝试向结果写入某些内容时,就会发生此错误 - 通常这意味着您对结果调用了两次 send()

发生这种情况是因为您调用回调两次 - 一次在 if(result.length != 0) 段中,另一次在所有 if 语句之后

关于javascript - nodejs 错误是发送后无法设置 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33355546/

相关文章:

javascript - 正则表达式模式,用于检查字符串中每个单词的第一个字母,如果它在 Javascript 中是大写的

javascript - Node.js selenium webdriver - 在测试中获取浏览器功能?

javascript - "message"使用 postMessage 时未触发事件

javascript - 无法在 Nodejs 中执行 FileUpload 程序

node.js - 第一次使用 DiskDB 时出现意外的输入错误结束

javascript - 为什么 d3.js 组元素在第一次拖动时会跳跃?

javascript - 如何防止CSS菜单中的自动滑动

javascript - AngularJS:调整 ng-model 与 ng-repeat 一起工作

JavaScript函数参数问题

javascript - 列出 Nodejs 中的所有 strip 费用