web-dev-qa-db-ja.com

mongodbを起動して表現する正しい方法は?

私はエクスプレスで動作し、mongodbと通信するアプリを持っています。これが私のアプリの起動方法です:

1.Mongodbを開始

mongod --dbpath data --config mongo.conf"

2.Expressを開始

node server.js

私の質問は、これらを組み合わせる方法はありますか? nodeはシングルスレッドであるため、server.jsからexpressとmongoの両方を実行することはできませんが、正しい方法は何ですか? npmを使用してJavaScriptファイルからmongoを起動することはできますか?

編集:

mongod --dbpath dataおよびnode server.jsを2つの異なるコマンドプロンプトで個別に実行できます。私の質問は、それらを1つのファイルから開始することです(可能な場合)。

16
WhatisSober

startは、Windowsに新しいコマンドを作成します。ここに私の設定があります。

"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()\""
},

幸運を!

15
Peter

Windowsサービスとして実行するようにmongoを設定しました。私は常にmongoを使用しており、私の開発マシンでは過去3年間動作しました。デプロイメントマシンで、mongoがデーモンによって制御されるように設定します。

2
simon-p-r

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を入力する方が簡単なので、別のターミナルでアプリを実行します。

1
Christo

Package.jsonでは、スクリプトを定義できます。ここに予約済みコマンドのリストがあります: https://docs.npmjs.com/misc/scripts

ベースのOS 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",
    "pretest": "mongod --dbpath data --config mongo.conf &",
    "test": "node server.js",
    "posttest": "kill %%",
}
_

その後、開発を行う場合は_npm test_を使用でき、本番環境では_npm start_を使用できます。

MongoClientをセットアップしてMongoClient.connect(url, opts)のオプション引数に_useNewUrlParser: true_と_useUnifiedTopology: true_を指定する場合にも注意してください。mongoDBは起動時間が短く、ノードではない可能性が高いためですスクリプトの起動時間はデータベースよりも短くなり、データベースが見つからなかったというエラーメッセージが表示されます。

1
John Becker

これを試して。

"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"},
0
EAS