我有一个应用程序,它在快递上运行并与mongodb通信。这就是我启动应用程序的方式:
1.启动Mongodb
mongod --dbpath data --config mongo.conf"
2.启动快递
node server.js
我的问题是,有没有办法将这些结合起来?我知道node是单线程的,所以我们不能从server.js运行express和mongo,但是正确的方法是什么?是否可以使用npm从javascript文件启动mongo?
编辑:
我可以在两个不同的命令提示符下分别运行 mongod --dbpath data 和 node server.js 。我的问题是从一个文件中启动它们(如果可能的话)。
答案 0 :(得分:14)
start
在Windows中创建新的cmd
这是我的配置:
"scripts": {
"prestart": "start mongod --config ./data/mongod.cfg",
"start": "node ./server/bin/www",
"poststart": "start mongo admin --eval \"db.getSiblingDB('admin').shutdownServer()\"",
"pretest": "start mongod --dbpath data",
"test": "mocha test",
"posttest": "start mongo admin --eval \"db.getSiblingDB('admin').shutdownServer()\""
},
祝你好运!
答案 1 :(得分:1)
如果您在Linux上运行,您可以使用package.json文件来定义完全符合您需要的脚本。
但也有一些问题:
如果您正在运行Linux,则可以使用
"mongod --fork --dbpath data --config mongo.conf"
和"node index.js"
使用mongodb并同时运行应用程序,这样就可以了。
但是如果你在Windows上,则必须为mongo使用单独的控制台窗口,为应用程序使用单独的控制台窗口。
如果你在Windows上运行,我可能会使用我的package.json脚本运行mongodb,我会在另一个终端运行我的应用程序,因为它比mongod部分更容易键入node index.js
。
答案 2 :(得分:1)
设置mongo作为Windows服务运行,我总是使用mongo并且它在我的开发机器上工作了3年。在部署机器上设置mongo由守护进程控制。
答案 3 :(得分:1)
在package.json中,您可以定义脚本。 以下是保留命令的列表,可以在这里找到:https://docs.npmjs.com/misc/scripts
如果您使用的是基于操作系统的unix,则可以执行以下操作:
"scripts": {
"prestart": "mongod --dbpath data --config mongo.conf &",
"start": "node server.js",
"poststart": "kill %%",
}
然后,当您想从终端运行此命令时,只需执行npm start
prestart命令末尾的&
意味着在后台运行,而poststart命令中的kill %%
杀死了最讨厌的后台任务(您也可以在第一个任务中执行%1
后台任务)。如果您要执行其他后台任务,则此操作可能会中断。请注意这一点。
如果将MongoDB托管在另一台服务器上进行生产,但在本地服务器上进行开发,则可以使用:
"scripts": {
"start": "node server.js",
"predev": "mongod --dbpath data --config mongo.conf &",
"dev": "node server.js",
"postdev": "kill %%",
}
然后,当您要进行开发时,可以使用npm dev
,而在生产中,则可以使用npm start
。
在设置MongoClient以在useNewUrlParser: true
的options参数中指定useUnifiedTopology: true
和MongoClient.connect(url, opts)
时也要记住,因为mongoDB的启动时间短,因此您可能不希望这样做。节点脚本的启动时间将比您的数据库短,并且会通过一条错误消息指出未找到您的数据库。
答案 4 :(得分:0)
尝试一下。
"scripts": {
"prestart": "start \"mongoServer\" \"c:Program Files/MongoDb/Server/3.4/bin/mongod.exe\" & start \"redis\" \"c:Program Files/Redis/redis-server.exe\"",
"start": "node app.js",
"stop": "Taskkill /IM mongod.exe & Taskkill /IM redis-server.exe"},
答案 5 :(得分:-1)
是。使用package.json可以定义脚本:
{
"name": "my package",
"version": "1.0.0",
"scripts": {
"start": "mongod --dbpath data --config mongo.conf && node server.js",
},
"devDependencies": {
"express": "*"
}
}
调用npm start
将执行package.json