2 votes

now.js : Message d'erreur "Object has no method" lors de la tentative de lancement de server.js

J'ai installé node.js et now.js avec succès.

Pour now.js, voici comment j'ai procédé :

npm install now -g
npm install now (had to add this one. Without it, I get a "Cannot find now..." error message)

Lorsque je démarre le serveur node et que je fournis un fichier server.js comme ceci :

var httpServer = require('http');
httpServer.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write('Node is ok');
res.end();
}).listen(8080);
console.log('Server runs on http://xxxxx:8080/');

Tout va bien.

Maintenant, j'essaie d'ajouter à ce fichier une utilisation basique de now.js :

var nowjs = require("now");
var everyone = nowjs.initialize(httpServer);

everyone.now.logStuff = function(msg){
    console.log(msg);
}

Je crée un fichier index.html dans le même dossier (à des fins de test).

<script type="text/javascript" src="nowjs/now.js"></script>

<script type="text/javascript">
  now.ready(function(){
    now.logStuff("Now is ok");
  });
</script>

Cette fois, voici ce que j'obtiens sur le terminal au démarrage du serveur :

Server runs on http://xxxxx:8080/

[TypeError: Object #<Object> has no method 'listeners']
TypeError: Object #<Object> has no method 'listeners'
    at Object.wrapServer (/home/xxxx/node_modules/now/lib/fileServer.js:23:29)
    at [object Object].initialize (/home/xxxx/node_modules/now/lib/now.js:181:14)
    at Object.<anonymous> (/home/xxxx/server.js:10:22)
    at Module._compile (module.js:444:26)
    at Object..js (module.js:462:10)
    at Module.load (module.js:351:32)
    at Function._load (module.js:309:12)
    at module.js:482:10
    at EventEmitter._tickCallback (node.js:245:11)

N'oubliez pas que je suis un débutant absolu.

Merci pour votre aide

1voto

user9027325 Points 41

Npm install -g' installe des modules à un niveau global, souvent dans le but de fournir des binaires à l'échelle du système pour une utilisation en mode terminal. Pensez aux Ruby Gems. Si vous voulez inclure un module dans votre projet, vous devez supprimer le -g.

De plus, votre variable httpServer n'est pas votre serveur mais plutôt le module http. createServer() retourne un objet serveur que vous voulez capturer avec une variable à utiliser dans votre méthode nowjs.initialize() comme suit :

var http  = require('http')
    , now = require('now')

// Returns an Http Server which can now be referenced as 'app' from now on
var app = http.createServer(
    //... blah blah blah
)

// listen() doesn't return a server object so don't pass this method call
//     as the parameter to the initialize method below
app.listen(8080, function () {
    console.log('Server listening on port %d', app.address().port)
})

// Initialize NowJS with the Http Server object as intended
var everyone = nowjs.initialize(app)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X