2017-06-30 18 views
1

データベースにローカルjsonファイルを使用するエクスプレスサーバーがあります。 getterとsetterにはhttps://github.com/typicode/lowdbを使用しています。Nodemonはサーバーを再起動し続けます

現在のところ、サーバーは問題なく起動して再開しますが、アクセスできません。以下は私のServer.jsファイルです:

import express from 'express' 
import session from 'express-session' 
import bodyParser from 'body-parser' 
import promisify from 'es6-promisify' 
import cors from 'cors' 
import low from 'lowdb' 
import fileAsync from 'lowdb/lib/storages/file-async' 

import defaultdb from './models/Pages' 

import routes from './routes/index.js' 

const app = express(); 

const db = low('./core/db/index.json', { storage: fileAsync }) 

app.use(cors()) 

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: true })); 

app.use('/', routes); 

app.set('port', process.env.PORT || 1337); 

db.defaults(defaultdb).write().then(() => { 
    const server = app.listen(app.get('port'),() => { 
     console.log(`Express running → PORT ${server.address().port}`); 
    }); 
}); 

誰でもこのような問題がありますか?ドキュメントから

db.defaults(defaultdb).write().then(() => { 
    const server = app.listen(app.get('port'),() => { 
     console.log(`Express running → PORT ${server.address().port}`); 
    }); 
}); 

答えて

1

:私は、この行とは何かを持っていると思う

nodemonはnodemonが起動されたディレクトリ内のファイルを監視し、どのファイルが変更された場合、nodemon意志ノードアプリケーションを自動的に再起動します。

dbの.JSONファイルがnodemonの監視下にあり、常に書き込みを行っている場合、サーバーは無限ループで再起動し、アクセス不能になります。 .SSONファイルをあなたのディレクトリの外に移動するか、(もし可能であれば)いくつかのnodemon設定を使って移動することで、nodemonの監視範囲外に.JSONファイルを移動してみてください。

+0

しかし、私は常にDBに書いているわけではありません。スタートアップ時のみデフォルトのdbを書き込む。私の構文がどこかで間違っているため、無限ループが起こっていますか? – Dileet

+0

サーバの起動時に明示的に書き込む必要はありませんが、サーバ起動時にlowdbが.JSONファイルや他の関連ファイルに書き込んでいる可能性があります。 –

+0

@Dileetまた、コードを見直した後、この行は 'db.defaults(defaultdb).write()'を実行しているようです。起動時にこれを実行するので、上記の無限ループにぶつかります。 –

1

私は再開の一定の流れで困惑しました。私はnodemon --verboseで再起動の原因を調べ始めました。

これは私のpackage.jsonファイルが原因であることを明らかにしました。 Dropboxフォルダにインストールしていて、node_modulesフォルダからすべてのファイルを削除して、新しくインストールしました。私のDropboxフォルダを共有していた別のコンピュータがその時点で動作していて、私には分かりませんでしたが、node_moduleファイルを更新してpackage.jsonファイルのDropboxコピーを更新していました。

私の解決策は簡単で、Dropboxがnode_modulesフォルダのインデックス作成を完了するのを待っていました。 Dropboxが同期を終了すると、予期しない再起動なしにnodemonが実行されました。

関連する問題