【问题标题】:Nodemon keeps restarting serverNodemon不断重启服务器
【发布时间】:2017-12-04 23:13:07
【问题描述】:

我有一个使用本地 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}`);
    });
});

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    来自文档:

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

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

    【讨论】:

    • 但我不会经常写数据库。仅在启动时写入默认数据库。我的语法是否错误导致无限循环?
    • 您可能没有在服务器启动时明确写入它,但是当您的服务器启动时,lowdb 可能正在写入您的 .JSON 文件或其他相关文件。
    • @Dileet 同样在查看代码之后,这行似乎正在执行写入db.defaults(defaultdb).write()。由于它在启动时执行此操作,因此您将遇到上面提到的无限循环。
    • 好的,所以删除它有效。但是我将如何设置默认数据库?
    【解决方案2】:

    我对不断的重启感到困惑。我从 nodemon --verbose 开始查看导致重启的原因。

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

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

    【讨论】:

    • 我用它来诊断源,然后建议修复“--ignore”标志。
    【解决方案3】:

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

    实际上你只需要这样做

     nodemon --ignore 'logs/*'
    

    【讨论】:

    • 您的链接似乎已损坏。
    • 确实链接已损坏,但我不是页面的所有者,尽管您可以尝试使用命令 nodemon --ignore 'logs/*' 并且它可以工作。
    • 我使用nodemon --ignore 'sessions/*' index.js,因为我的会话被写入同一个目录中的文件。
    【解决方案4】:

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

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

    【讨论】:

    • 非常好。添加一次到 package.json 并忘记它!
    • 是的,@Matiss。谢谢!
    【解决方案5】:

    在我的情况下(与 OP 相同)只是忽略了数据库文件的工作

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

    【讨论】:

      【解决方案6】:

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

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

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

      npm install supervisor -g
      

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

      【讨论】:

        【解决方案7】:

        您可以使用这个通用配置文件。 将其命名为nodemon.json 并放入项目的根文件夹中。

        {
          "restartable": "rs",
          "ignore": [".git", "node_modules/", "dist/", "coverage/"],
          "watch": ["src/"],
          "execMap": {
            "ts": "node -r ts-node/register"
          },
          "env": {
            "NODE_ENV": "development"
          },
          "ext": "js,json,ts"
        }
        

        【讨论】:

          【解决方案8】:

          我通过在package.json 文件中添加以下代码解决了这个问题

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

          【讨论】:

            猜你喜欢
            • 2020-07-11
            • 2021-08-28
            • 2018-11-10
            • 2018-06-13
            • 2018-09-21
            • 2021-01-25
            • 2014-05-27
            • 1970-01-01
            • 2020-08-21
            相关资源
            最近更新 更多