簡體   English   中英

nodejs錯誤是發送后無法設置標頭

[英]nodejs error is Can't set headers after they are sent

嗨,我有這個錯誤,但我不明白為什么會出現該錯誤,請幫助我解決它。

 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語句之后再次調用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM