2017-02-23 1 views
0

Die erste Anfrage funktioniert gut, aber nach einer anderen Anfrage habe ich diese Fehlermeldung erhalten. Meine Logik verdoppelt die Anforderung nicht, aber es sieht so aus, als ob jede Route nicht separat aufgerufen wird. Die erste Anfrage an /api/user funktioniert einwandfrei. Nach einer Aktualisierung bekam ich den Fehler Can't set headers after they are sent.node.js API-Antwort nicht beendet "kann Header nicht senden, nachdem sie gesendet wurden."

res.end() erzeugt keinen Fehler.

res.send() und res.json() und res.header('Content-Type', 'application/json'); res.end(); werden Fehler bei einer Aktualisierung erzeugen.

In einer anderen API res.json() funktioniert gut, aber es gibt keine Verwendung von Klassen/Funktionen noch EventEmitter. Vielleicht ist das Problem da?

routes.js

route.get("/", function(req, res) { 
    user.on('error', function(err) { 
     res.status(400).send({code: 900, message: err, data: null}); 
    }); 
    user.on('success', function(result) { 
     res.status(200).send({code: 200, message: 'OK', data: result}); 
    }); 
    user.getAll(); 
}); 

user.js

var util = require('util'); 
var EventEmitter = require('events').EventEmitter; 
var initialize = require(global.__base + "/config"); 
var db = initialize.db(); 

function User() { 
    var self = this; 
    this.get = get; 


    function _checkForErrors(error, rows, reason) { 
     if (error) { 
      self.emit('error', error); 
      return true; 
     } else if (reason) { 
      self.emit('failure', reason); 
      return true; 
     } 
     return false; 
    } 

    function _getData(error, rows) { 
     if (_checkForErrors(error, rows)) { 
      return false; 
     } else { 
      self.emit('success', rows); 
      return true; 
     } 
    } 

    function getAll() { 
     db.query("SELECT * FROM patient", _getData); 
    } 
} 
util.inherits(User, EventEmitter); 
module.exports = User; 

db init

module.exports = { 
    globalModules: function() { /*foo*/ }, 

    db: function() { 
     var mysql = require('mysql'); 
     var db = mysql.createPool({ 
       host:  'localhost', 
       user:  'root', 
       password: '', 
       database: 'node_docx' 
      }); 
     return db; 
    } 
}; 
+0

legen Sie Ihre Benutzerroute –

Antwort

0

Sie return müssen die Antwort, den Prozess zu beenden:

route.get("/", function(req, res) { 
    user.on('error', function(err) { 
     return res.status(400).send({code: 900, message: err, data: null}); 
    }); 
    user.on('success', function(result) { 
     return res.status(200).send({code: 200, message: 'OK', data: result}); 
    }); 
    user.getAll(); 
}); 
0

schließlich endete ich, um ein BaseModel zu erstellen, das die Antwort verarbeitet ... jedes Modell (wie Benutzer) erbt jetzt von diesem.

var basemodel = BaseModel.prototype; 

function BaseModel() { 
    self = this; 
}; 

basemodel.sendResponse = function(res, obj) { 
    if (!res.getHeader('Content-Type')) { 
     res.header('Content-Type', 'application/json'); 
    } 
    obj.on('error', function(err) { 
     return res.status(400).end(JSON.stringify({code: 901, message: err, data: null})); 
    }); 
    obj.on('failure', function(fail) { 
     return res.status(400).end(JSON.stringify({code: 902, message: fail, data: null})); 
    }); 
    obj.on('success', function(result) { 
     return res.status(200).end(JSON.stringify({code: 200, message: 'OK', data: result})); 
    }); 
}; 
Verwandte Themen