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 文件。 检查 main 字段的文件名。 就我而言,它是 ...,"main": "app.js",...。 这个 app.js 是程序的主要入口点。 现在,尝试使用以下命令启动您的服务器,
nodemon app.js
或
node app.js
解决方案 3:
如果你的程序正在运行,
node app.js
但是,没有
nodemon app.js
那么,这个问题在于 nodemon。 如果您的项目中有 名称为的文件为 index.js 和 app.js,则删除 index.js 将解决问题。
如果 index.js 是您的程序的入口点,请尝试上面给出的解决方案 2,并将 package.json 文件中的 main 字段值更改为 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