2012-11-08 3 views
1

J'écris un script de test pour mon module et je dois pouvoir fermer mon serveur lorsque ma requête est terminée. Le code suivant fonctionne mais je peux voir que app.close() a été supprimé d'express 3. Quelle est la meilleure façon de le faire maintenant?nodejs exprime un serveur fermé lorsque la requête est terminée

var testCase = require('nodeunit').testCase; 
var request = require('request'); 
var express = require('express'); 

var app = express.createServer(); 
var srv = app.listen(); 
.... 

request({ 
    method: 'POST', 
    json: true, 
    body: { id: 'second request'}, 
    url: 'http://' + target 
    }, function(err, res, body) { 

    console.info("closing server"); 
    app.close(); 
    test.done(); 
    }); 
}); 

Merci, Li

P.S. test.done() doit être appelé après la fermeture du serveur, sinon le test échouera.

Répondre

2

Les applications Express héritaient de http.Server, ce qu'elles ne font plus, et c'est de là que vient la méthode close. Appelez plutôt close() sur votre instance srv. Vous pouvez généralement voyez ce code écrit:

var app = express.createServer(); 
var srv = require('http').createServer(app); 
srv.listen(port); 

Selon the documentation pour app.listen():

Bind and listen for connections on the given host and port, this method is identical to node's http.Server#listen() .

+0

J'ai essayé de courir ce avec express 2.5 et il me donne l'erreur suivante: throw new Error ('addListener prend seulement des instances de Fonction '); Je suppose que "app" n'est pas une instance d'une fonction en express 2.5 ... Une idée de comment manipuler le code pour que ça marche? (Je veux que le code s'exécute sur les versions 2.5 et supérieures express) – user429400

+0

Ils ont deux interfaces différentes, vous aurez donc besoin d'écrire deux versions du code. Je suppose que vous pouvez vérifier 'typeof app' pour voir si c'est une fonction ou non. –

+0

donc si c'est une fonction, je devrais utiliser le nouveau code, et sinon je devrais utiliser l'ancien code avec le app.close()? – user429400

Questions connexes