Je tente donc de lancer mon application de nœud, mais il y a quelques erreurs découlant de mon installation de MongoDB.
Voici les spécifications de mon environnement de développement:
node => 0.10.33 (installé à partir de nodejs.org)
npm => 1.4.28 (installé à partir de nodejs.org)
git => 2.1.3 (homebrewed)
mongodb => 2.6.5 (homebrewed)
Si cela fait une différence, j'utilise également le Mean Stack Skeleton dans le cadre d'un tutoriel.
En résumé, lorsque j'essaie d'exécuter mon application de nœud à l'aide de $ node app.js
, je reçois les commentaires suivants:
USER$ npm install mongoose
> [email protected] install /Users/USER/APP/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos
> (node-gyp rebuild 2> builderror.log) || (exit 0)
CXX(target) Release/obj.target/kerberos/lib/kerberos.o
CXX(target) Release/obj.target/kerberos/lib/worker.o
CC(target) Release/obj.target/kerberos/lib/kerberosgss.o
CC(target) Release/obj.target/kerberos/lib/base64.o
CXX(target) Release/obj.target/kerberos/lib/kerberos_context.o
SOLINK_MODULE(target) Release/kerberos.node
SOLINK_MODULE(target) Release/kerberos.node: Finished
> [email protected] install /Users/USER/APP/node_modules/mongoose/node_modules/mongodb/node_modules/bson
> (node-gyp rebuild 2> builderror.log) || (exit 0)
CXX(target) Release/obj.target/bson/ext/bson.o
SOLINK_MODULE(target) Release/bson.node
SOLINK_MODULE(target) Release/bson.node: Finished
[email protected] node_modules/mongoose
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected] ([email protected])
└── [email protected] ([email protected], [email protected], [email protected])
J'ai vérifié les fichiers builderror.log
pour les modules kerberos
et bson
. Cependant, les deux sont vides.
Certaines recherches que j'ai trouvées donnent à penser que le problème pourrait provenir du fait que mon installation node-gyp
ne possède pas de fichier binding.gyp
correspondant.
Également essayé d'exécuter $ node-gyp configure
dans mon dossier de projet Node.js. Et voici l'erreur que j'ai reçue:
gyp: binding.gyp not found (cwd: /Users/USER/APP) while trying to load binding.gyp
gyp ERR! configure error
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack at ChildProcess.onCpExit (/usr/local/lib/node_modules/node-gyp/lib/configure.js:343:16)
gyp ERR! stack at ChildProcess.emit (events.js:98:17)
gyp ERR! stack at Process.ChildProcess._handle.onexit (child_process.js:810:12)
gyp ERR! System Darwin 12.5.0
gyp ERR! command "node" "/usr/local/bin/node-gyp" "configure"
gyp ERR! cwd /Users/USER/APP
gyp ERR! node -v v0.10.33
gyp ERR! node-gyp -v v1.0.2
gyp ERR! not ok
Des idées pour lesquelles j'ai ces problèmes?
EDIT: Après avoir configuré le port dans mon fichier app.js
pour qu'il soit identique à celui sur lequel écoute le serveur Express (duh), je reçois davantage de retours indiquant que j'utilisais Mongoose 3.9.4, qui est la dernière version instable de mongoose
. J'ai donc défini le module sur 3.8.18 dans mon package.json
et tenté de réinstaller le module. J'ai reçu les mêmes erreurs. Cependant, le retour d'information sur les versions instables a disparu.
Après avoir cd
'd dans les répertoires kerberos
et bson
, j'ai utilisé la commande $ node-gyp rebuild
et les modules de nœud compilés correctement.
Mon fichier app.js
, j’ai appelé les lignes suivantes:
var app = express();
...
var Mongoose = require('mongoose');
var db = Mongoose.createConnection('localhost','database');
// all environments
app.set('port', process.env.PORT || 3000);
Ce numéro de port doit être unique par rapport au port de votre instance de base de données.
Dans une fenêtre de terminal séparée, exécutez $ mongod
pour spool up votre MongoDB. Une fois que cela est appelé, dans une autre fenêtre de terminal, vous appelez $ mongo database
. Cela crée l'instance de base de données appelée database
pour que votre application Node.js se connecte. Dans la fenêtre d'origine de votre terminal, appelez $ node app.js
et il s'exécutera sans aucun retour d'erreur.
Les erreurs que je recevais ne résultaient pas d'une construction incorrecte de Mongoose, de MongoDB ou de l'une de leurs dépendances. Les erreurs résultaient d'une idée fausse sur MongoDB. MongoDB doit être exécuté en tant que processus distinct de votre application Node.js pour que celle-ci établisse une connexion à la base de données.
Pour tous les utilisateurs d’une distribution Linux, assurez-vous d’avoir installé libkrb5-dev
(ou le paquet similaire de votre distribution). Cela résoudra de nombreuses erreurs de compilation avec bson et kerberos.
Pour les utilisateurs d'ubuntu, commencez par désinstaller Moongose.
npm uninstall mongoose --save
puis installez la mise à jour de Kerberos
apt-get install libkrb5-dev
puis "installer" à nouveau moongose
npm install mongoose --save
J'espère que cela aide quelqu'un là-bas.
J'ai résolu ce problème en installant node-gyp dans la portée globale. J'espère que ça aide.
$ npm install -g node-gyp
Je viens de désinstaller Mongodb, puis d'installer Mangouste avec succès.
npm uninstall mongodb --save
npm install mongoose --save