私はエクスプレスで動作し、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つのファイルから開始することです(可能な場合)。
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()\""
},
幸運を!
Windowsサービスとして実行するようにmongoを設定しました。私は常にmongoを使用しており、私の開発マシンでは過去3年間動作しました。デプロイメントマシンで、mongoがデーモンによって制御されるように設定します。
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
を入力する方が簡単なので、別のターミナルでアプリを実行します。
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は起動時間が短く、ノードではない可能性が高いためですスクリプトの起動時間はデータベースよりも短くなり、データベースが見つからなかったというエラーメッセージが表示されます。
これを試して。
"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"},