Nodemon - 安装期间“干净退出 - 等待重新启动前的更改”

Posted

技术标签:

【中文标题】Nodemon - 安装期间“干净退出 - 等待重新启动前的更改”【英文标题】:Nodemon - "clean exit - waiting for changes before restart" during setup 【发布时间】:2018-07-10 02:43:58 【问题描述】:

我正在尝试使用 Node 和 Postgres 设置 RESTful API。我遇到了一个问题,每当我尝试运行服务器(使用 npm start)在本地测试它时,我都会得到以下输出:

[nodemon] 1.14.10 [nodemon] 随时重启,输入rs [nodemon] 观看:. [nodemon] 启动node index.js server.js [nodemon] 干净退出 - 重启前等待更改

在网上搜索了很长一段时间后,我找不到太多关于“干净退出 - 重新启动前等待更改”的确切含义的资源,尤其是在这种情况下。

这是我的 queries.js 文件:

  1 var promise = require('bluebird');
  2 
  3 var options = 
  4   // Initialization Options
  5   promiseLib: promise
  6 ;
  7 
  8 // created an instance of pg-promise, override default pgp lib w bluebird
  9 var pgp = require('pg-promise')(options);
 10 var connectionString = 'postgres://localhost:3000/actions';
 11 var db = pgp(connectionString);
 12 
 13 // add query functions
 14 
 15 module.exports = 
 16   getAllActions: getAllActions,
 17 //  getSingleAction: getSingleAction,
 18 //  createAction: createAction,
 19 //  updateAction: updateAction,
 20 //  removeAction: removeAction
 21 ;
 22 
 23 function getAllActions(req, res, next) 
 24   db.any('select * from acts')
 25     .then(function (data) 
 26       res.status(200)
 27         .json(
 28           status: 'success',
 29           data: data,
 30           message: 'Retrieved ALL actions'
 31         );
 32     )
 33     .catch(function (err) 
 34       return next(err);
 35     );
 36 

这是我的 index.js 文件:

  3 var express = require('express');
  4 var app = express();
  5 var router = express.Router();
  6 var db = require('./queries');
  7 
  8 // structure: expressInstance.httpRequestMethod(PATH, HANDLER)
  9 app.get('/api/actions', db.getAllActions);
 10 //app.get('/api/actions/:id', db.getSingleAction);
 11 //app.post('/api/actions', db.createAction);
 12 //app.put('/api/actions/:id', db.updateAction);
 13 //app.delete('/api/actions/:id', db.removeAction);
 14 
 15 module.exports = router;

对这里可能发生的事情有什么想法吗?提前致谢。

【问题讨论】:

【参考方案1】:

面对同样的问题,我只是删除了 node_modules 文件夹和 package-lock.json 文件并重新安装了依赖项,它就可以工作了。

【讨论】:

【参考方案2】:

[nodemon] 开始 node index.js URI 格式错误 [nodemon] clean exit - 重启前等待更改

我可以通过将连接 url 密码中的“@”符号更改为 %40 来解决此问题

【讨论】:

【参考方案3】:

我有同样的问题,但我的问题是非常简单的新手问题——在这里添加它以防那些新表达的和这种类型的代码犯同样的错误

我在我的“app.get”代码中不知不觉地包含了“app.listen”(是的,我知道,这是非常基本的错误,但令人沮丧,因此在这里给出了我的选择)

走错路

app.get("/", (req, res) => 
    res.send(req.query);
*....additional code here...*
app.listen(port, () => 
    console.log("hey app is listening");
);

);

正确的方式-

app.get("/", (req, res) => 
    res.send(req.query);
);
app.listen(port, () => 
    console.log("hey app is listening");
);

【讨论】:

【参考方案4】:

我也遇到过同样的问题。

节点版本为 14.15.5。

所以安装了 node 12.22 版本并且工作正常。

【讨论】:

【参考方案5】:

在寻找解决方案数小时后,为什么我在 docker 中的生产节点构建总是立即以退出 0 停止,我发现 docker-images 的节点版本不兼容。如果您在 docker 中遇到此问题,请尝试不同的节点版本

【讨论】:

【参考方案6】:

如果您使用快速生成器,您的程序将在浏览器拒绝连接上显示错误,而不是在终端上尝试此代码

npm 开始 要么 节点启动

【讨论】:

【参考方案7】:

解决方案 1:

首先确保您已为 Node-Express 应用程序包含这些代码行,

 // 3000 is the port number in my case.
    app.listen(3000, function() 
        console.log("Server is running on port " + 3000);
    );

在您的主文件(即我的情况下为 app.js)中启动服务器。

解决方案 2:

打开你的 package.json 文件。 检查 ma​​in 字段的文件名。 就我而言,它是 ...,"main": "app.js",...。 这个 app.js 是程序的主要入口点。 现在,尝试使用以下命令启动您的服务器,

nodemon app.js

node app.js

解决方案 3:

如果你的程序正在运行,

node app.js

但是,没有

nodemon app.js

那么,这个问题在于 nodemon。 如果您的项目中有 名称为的文件为 index.jsapp.js,则删除 index.js 将解决问题。

如果 index.js 是您的程序的入口点,请尝试上面给出的解决方案 2,并将 package.json 文件中的 ma​​in 字段值更改为 index.js 即 ...,"main": "index.js",...。 这将解决您的问题。

【讨论】:

【参考方案8】:

如果有人对此仍有疑问,我的解决方法是我发现我的数据库未连接我正在使用 mongodb 进行设置,因此使用 mongod 命令设置 mongo 并使用任一节点 app.js 再次运行服务器或 nodemon app.js 修复了我的

【讨论】:

【参考方案9】:

在处理另一个 Node 应用(主文件:index.js)后返回到一个 Node 应用(主文件:app.js)后,我遇到了类似的问题。

如果我输入了

Nodemon app 

我收到一条消息

[nodemon] starting `node app index.js`
[nodemon] clean exit - waiting for changes before restart

我玩过Nodemon的版本(更新没什么区别),然后我尝试进入

Node app

并得到通常正确的工作响应,即

[nodemon] 1.19.0
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node app.js`
HTTP server started at port 3000 ...

当我进入时我也得到了正确的结果

Nodemon app.js 

现在,通常到那时为止,无论您输入 app.js 还是 app 都没有区别 - 但这里 确实如此 似乎有所作为。也许其他 Node 应用程序的一些缓存设置(即使用 index.js 作为主脚本并使用 app 作为该文件中的对象的设置)被保留并以某种方式引用。

这里有精通Nodemon的人来解释一下吗?

【讨论】:

【参考方案10】:

我也想知道 nodemon 记录的这个语句。我只有在最后几天才经历过。如果我的快速服务器代码中存在一些语法错误,我会收到此错误。当我通过

启动服务器时
> node server

服务器没有启动,甚至没有向控制台记录任何内容。 我认为奇怪的行为。这个消息似乎与nodemon无关。 我过去从未在节点上经历过这样的事情。每次引入语法错误时,我都会收到一条错误消息,其中堆栈跟踪输出到控制台。

正如我之前所说,这只是一个语法错误:.then 块中缺少右括号。

毕竟我不知道为什么节点没有像我以前经历过的那样打印堆栈跟踪。

我进一步调查,但从这种错误中学到的一件事可能是使用 linter 编写 javascript 代码,或者更进一步使用 TypeScript。我使用 TypeScript 开发带有 Angular 的客户端,早期检测语法错误的可能性很大。

【讨论】:

【参考方案11】:
   app.listen(5010,function()
      console.log("server is running on port 5010");
   );

//添加上面的代码来解决这个问题

【讨论】:

【参考方案12】:

您的代码有一些问题。你从来没有告诉你的应用程序运行。当你准备好创建你的路由时,你应该启动你的服务器:

app.listen(<port on which the server should run here>);

您在同一个文件中还有一个 Express 应用和一个路由器。路由器只能用作子模块(当您想将应用程序划分为多个文件时很方便)。现在你什么都不做。如果您删除路由器和导出,那么它应该可以正常工作。

【讨论】:

这是一个很好的例子github.com/expressjs/express/tree/master/examples/… 谢谢,这似乎解决了这个问题。但是,我正在关注 [mherman.org/blog/2016/03/13/… 教程,并达到了“在浏览器中测试请求”的程度。注意 index.js 在同一个文件中有 express 和 router - 在这种情况下,这是不好的做法吗?还是有什么误解?只是希望在这里澄清一下。 我已经快速查看了教程,但它有点不完整。 app 对象永远不会被创建,也不会解释如何创建 Express 服务器。我建议您观看这些教程而不是 m.youtube.com/… 这是一个普通的堆栈教程,但 angular 直到第 5 部分才开始发挥作用。如果您想了解 Express 的工作原理,前 3-4 部分非常有用。完成后,您应该能够对 SQL 执行相同的操作。

以上是关于Nodemon - 安装期间“干净退出 - 等待重新启动前的更改”的主要内容,如果未能解决你的问题,请参考以下文章

Nodemon安装问题。当我在我的节点 js 中安装 nodemon

无法安装 nodemon node.js

nodemon包未安装在nodejs中[重复]

尝试使用 Discord.js 安装 nodemon 时出错 [重复]

Linux 上的 Nodemon 安装警告

安装nodemon热启动