web-dev-qa-db-fra.com

besoin n'est pas défini? Node.js

Je viens de commencer à travailler avec Node.js. Dans mon fichier app/js, je fais quelque chose comme ceci:

app.js

var http = require('http');

http.createServer(function (request, response) {
  response.writeHead(200, {'Content-Type': 'text/plain'});
  response.end('Am I really running a server?!');
}).listen(8080, '127.0.0.1');

console.log('running server!');

Lorsque je suis dans mon terminal et que je lance node app.js, la console crache 'running server!', mais dans mon navigateur, j’obtiens Uncaught ReferenceError: require is not defined.

Quelqu'un peut-il m'expliquer pourquoi dans le terminal, cela fonctionne correctement mais dans le navigateur, ça ne fonctionne pas?

J'utilise le http-server du nœud pour servir ma page.

36
Richard Bustos

Dans le terminal, vous exécutez l'application de nœud et votre script est exécuté. Il s’agit d’un environnement d’exécution très différent de l’exécution directe de votre script dans le navigateur. Bien que le langage Javascript soit globalement identique (que vous utilisiez le navigateur Chrome avec la V8), le reste de l’environnement d’exécution, tel que les bibliothèques disponibles, ne sont pas les mêmes.

node.js est un environnement d'exécution Javascript côté serveur qui associe le moteur Javascript V8 à un ensemble de bibliothèques côté serveur. require() est l'une des fonctionnalités que node.js ajoute à l'environnement. Ainsi, lorsque vous exécutez node dans le terminal, vous exécutez un environnement contenant require().

require() n'est pas une fonctionnalité intégrée au navigateur. C'est une caractéristique spécifique de node.js, pas d'un navigateur. Ainsi, lorsque vous essayez de demander au navigateur d’exécuter votre script, il n’a pas require().

Il existe des moyens d'exécuter certaines formes de code node.js dans un navigateur (mais pas toutes). Par exemple, vous pouvez obtenir des substituts de navigateur pour require() qui fonctionnent de la même manière (mais pas à l'identique).

Cependant, votre navigateur ne comportera pas de serveur Web, car le navigateur n’a pas cette possibilité.


Vous pouvez être intéressé par browserify qui vous permet d'utiliser des modules de style nœud dans un navigateur à l'aide d'instructions require().

43
jfriend00

Node.JS est une technologie côté serveur , pas une technologie de navigateur. Ainsi, les appels spécifiques à un nœud, tels que require(), ne fonctionnent pas dans le navigateur.

Voir browserify ou webpack si vous souhaitez servir des modules spécifiques au navigateur à partir de Node.

57
Rob Raisch