Javascript Nodemon-“;清除退出-在重新启动前等待更改”;安装期间

Javascript Nodemon-“;清除退出-在重新启动前等待更改”;安装期间,javascript,node.js,postgresql,nodemon,Javascript,Node.js,Postgresql,Nodemon,我正在尝试用Node和Postgres设置一个restfulapi。我遇到了一个问题,每当我尝试运行服务器(使用npm start)在本地对其进行测试时,我都会得到以下输出: [nodemon]1.14.10[nodemon]要随时重新启动,请输入rs[nodemon]监视:。[nodemon]正在启动node index.js server.js [nodemon]清除退出-在重新启动前等待更改 在网上搜索了相当长一段时间后,我找不到太多关于“干净退出-重新启动前等待更改”确切含义的资源,尤其

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

[nodemon]1.14.10[nodemon]要随时重新启动,请输入
rs
[nodemon]监视:。[nodemon]正在启动
node index.js server.js
[nodemon]清除退出-在重新启动前等待更改

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

这是my 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;

你有什么想法吗?提前感谢。

您的代码有几处错误。你从未让你的应用程序运行。当您准备好创建路由时,您应该使用以下设备启动服务器:

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

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

我还想知道nodemon记录的这条语句。我只是在最后几天才体验到这一点。如果express服务器代码中存在语法错误,则会出现此错误。当我通过启动服务器时

> node server
服务器不会启动,甚至不会将任何内容记录到控制台。 我想是奇怪的行为。这条消息似乎与nodemon无关。 我过去从未在node上经历过这样的事情。每次引入语法错误时,我都会收到一条错误消息,并将堆栈跟踪输出到控制台

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

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

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


//添加上面的代码以解决此问题

在使用另一个节点应用程序(主文件:index.js)后,我返回到一个节点应用程序(主文件:app.js)后遇到类似问题

如果我进去

Nodemon app 
Nodemon app.js 
我收到一条信息,像

[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 
Nodemon app.js 
现在,通常到那时为止,无论你输入app.js还是app,都没有什么区别,但在这里它确实有区别。可能另一个节点应用程序的一些缓存设置(即,使用index.js作为主脚本并使用app作为该文件中的对象的应用程序)被保留并以某种方式引用


这里有没有精通Nodemon的人来解释这一点?

如果还有人对此有问题,我是如何解决我的问题的,我发现我的数据库没有连接,我正在使用mongodb进行设置,因此使用mongod命令设置mongo,并使用node app.js或Nodemon app.js修复再次运行服务器的采矿

解决方案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

解决方案3:

如果您的程序正在运行

node app.js
但是,不是用

nodemon app.js
那么,这个问题是与节点门有关的。 如果项目中有名为index.jsapp.js文件,则删除index.js将解决此问题

如果index.js是您程序的入口点,请尝试上面给出的解决方案2,并将package.json文件中的main字段值更改为index.js i、 e.{…,“main”:“index.js”,…}。
这将解决您的问题。

如果您使用express generator,您的程序将在拒绝连接的浏览器上显示错误,然后在终端上尝试此代码

npm启动 或 nodemon启动


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

我也遇到了相同的问题

节点版本为14.15.5


安装了node 12.22版本,工作正常。

这是一个很好的示例,谢谢,这似乎解决了问题。然而,我遵循[教程]并达到了它所说的“在浏览器中测试请求”的程度。注意index.js将express和router放在同一个文件中-在这种情况下,这是一种不好的做法吗?还是有误解?只是希望这里有一点澄清。我快速阅读了教程,但它有点不完整。app对象从未创建,也没有解释如何创建express服务器。我建议您atch这些教程是一个平均堆栈教程,但angular直到第5部分才开始使用。如果您想了解Express的工作原理,前3-4部分非常好。完成后,您应该能够完成sam