Nodemon不断重启服务器

时间:2017-06-30 23:06:54

标签: javascript node.js

我有一个快速服务器,它使用本地json文件作为数据库。我使用https://github.com/typicode/lowdb作为getter和setter。

目前,服务器不间断地启动和重新启动,但无法访问它。下面是我的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}`);
    });
});

6 个答案:

答案 0 :(得分:6)

来自文档:

  

nodemon将监视启动nodemon的目录中的文件,如果有任何文件发生更改,nodemon将自动重启节点应用程序。

如果您的db的.JSON文件在nodemon的监视下,并且您经常写入它,则您的服务器将在无限循环中重新启动,从而使其无法访问。尝试将您的.JSON文件移动到nodemon监视范围之外,方法是将其移出目录或通过某些nodemon配置(如果可能)。

答案 1 :(得分:6)

我从this page解决了这个问题。

几乎你只需做

 nodemon --ignore 'logs/*'

答案 2 :(得分:4)

我不断地重新启动。我开始使用nodemon --verbose来查看导致重启的原因。

这表明我的package.json文件是罪魁祸首。我在Dropbbox文件夹中运行我的安装,刚从node_modules文件夹中删除了所有文件并完成了全新安装。共享我的Dropbox文件夹的另一台计算机当时正在运行,我不知道,它正在忙着更新其node_module文件并更新package.json文件的Dropbox副本。

我的解决方案结果很简单,我休息一下,等待Dropbox完成对node_modules文件夹的索引。当Dropbox完成同步时,nodemon在没有任何意外重启的情况下运行。

答案 3 :(得分:1)

就我而言(与OP相同),只是忽略了数据库文件的作用

nodemon --ignore server/db.json server/server.js

答案 4 :(得分:0)

我的解决方案:我在 package.json 文件中添加了 nodemonConfig ,以停止无限循环/重新启动。在 package.json 中:

"nodemonConfig": { "ext": "js", "ignore": ["*.test.ts", "db/*"], "delay": "2" },
"scripts": { "start": "nodemon" }

答案 5 :(得分:0)

我通过在我的 package.json 中创建一个脚本来解决这个问题:

scripts": {
    "start-continuous": "supervisor server/server.js",
},

如果您在全局范围内安装了主管,这将起作用。

npm install supervisor -g

现在我要做的就是:npm run start-continuous