所以我试图启动我的节点应用程序,但我的MongoDB安装出现了一些错误。
以下是我的开发环境的规范:
node => 0.10.33 (从nodejs.org安装)
npm => 1.4.28 (从nodejs.org安装)
git => 2.1.3 (自制)
mongodb => 2.6.5 (自制)
如果它有所不同,我也在使用Mean Stack Skeleton作为教程的一部分。
简而言之,当我尝试使用$ node app.js
运行我的节点应用时,我收到以下反馈:
USER$ npm install mongoose
> kerberos@0.0.4 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
> bson@0.2.15 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
mongoose@3.8.18 node_modules/mongoose
├── regexp-clone@0.0.1
├── muri@0.3.1
├── sliced@0.0.5
├── hooks@0.2.1
├── mpath@0.1.1
├── mpromise@0.4.3
├── ms@0.1.0
├── mquery@0.8.0 (debug@0.7.4)
└── mongodb@1.4.12 (readable-stream@1.0.33, kerberos@0.0.4, bson@0.2.15)
我检查了builderror.log
和kerberos
模块的bson
个文件。但是,两者都是空的。
我发现的一些研究表明问题可能是因为我的node-gyp
安装没有相应的binding.gyp
文件。
还尝试在我的Node.js项目文件夹中运行$ node-gyp configure
。这是我收到的错误:
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
为什么我遇到这些问题?
编辑:在我的app.js
文件中设置端口以将端口设置为Express服务器正在侦听的端口(duh)后,我得到更多反馈,表明我使用的是Mongoose 3.9.4,这是mongoose
的最新不稳定版本。所以我在我的package.json
中将模块设置为3.8.18并尝试重新安装模块。我收到了同样的错误。然而,不稳定的释放反馈现在已经消失。
答案 0 :(得分:54)
对于Linux发行版上的任何人,请确保安装了libkrb5-dev
(或您的发行版的类似软件包)。这将解决bson和kerberos的许多构建错误。
答案 1 :(得分:18)
对于ubuntu用户,首先卸载moongose
npm uninstall mongoose --save
然后安装kerberos更新
apt-get install libkrb5-dev
然后"安装" moongose再次
npm install mongoose --save
我希望这有助于那里的人。
答案 2 :(得分:14)
我已经通过将node-gyp安装到全局范围中来解决这个问题。希望它有所帮助。
$ npm install -g node-gyp
答案 3 :(得分:4)
我只是卸载mongodb然后成功安装mongoose。
npm uninstall mongodb --save
npm install mongoose --save
答案 4 :(得分:0)
在我cd
进入kerberos
和bson
目录后,我使用了命令$ node-gyp rebuild
并正确编译了节点模块。
我的app.js
文件,我调用了以下行:
var app = express();
...
var Mongoose = require('mongoose');
var db = Mongoose.createConnection('localhost','database');
// all environments
app.set('port', process.env.PORT || 3000);
此端口号在数据库实例的端口中必须是唯一的。
在单独的终端窗口中,运行$ mongod
以清空MongoDB。一旦调用,在另一个终端窗口中,您呼叫$ mongo database
。这将为您的Node.js应用程序创建名为database
的数据库实例以进行连接。在原始终端窗口中,请致电$ node app.js
,它将在没有任何错误反馈的情况下运行。
我得到的错误不是Mongoose,MongoDB或其任何依赖项的错误构建的结果。错误是由于对MongoDB的误解造成的。 MongoDB必须作为一个独立于Node.js应用程序的进程运行,以便应用程序建立数据库连接。