正确的方式启动mongodb并表达?

时间:2015-10-24 09:41:19

标签: javascript node.js mongodb express

我有一个应用程序,它在快递上运行并与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 。我的问题是从一个文件中启动它们(如果可能的话)。

6 个答案:

答案 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: trueMongoClient.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

中定义的启动脚本

有关详情,请参阅https://docs.npmjs.com/misc/scripts