我正在尝试使用Node和Postgres设置RESTful API。我遇到了一个问题,每当我尝试运行服务器(使用npm start)在本地测试它时,我得到以下输出:
[nodemon] 1.14.10 [nodemon]随时重启,输入
rs
[nodemon]观看:。 [nodemon]从node index.js server.js
开始 [nodemon] clean exit - 在重新启动之前等待更改
在网上搜索了相当长的一段时间之后,我找不到太多关于究竟是什么"干净退出的资源 - 在重启之前等待更改"确切意味着,特别是在这种情况下。
这是我的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;
有关这里可能发生什么的任何想法?提前谢谢。
答案 0 :(得分:6)
您的代码存在一些问题。你从未告诉你的应用程序运行。当您准备好创建路线时,您应该使用以下命令启动服务器:
app.listen(<port on which the server should run here>);
此外,您在同一个文件中有一个Express应用程序和一个路由器。路由器应仅用作子模块(当您想要将应用程序划分为多个文件时很方便)。现在你无所事事。如果您删除路由器和导出,那么它应该可以正常工作。
答案 1 :(得分:0)
我也想知道nodemon记录的该语句。我只是在最近的几天才经历过。如果我的快速服务器代码中存在某些语法错误,则会出现此错误。当我通过
启动服务器时> node server
服务器没有启动,甚至没有任何日志记录到控制台。 我认为行为很奇怪。看来此消息与nodemon无关。 我过去从未在node上经历过这样的事情。每次引入语法错误时,我都会收到一条错误消息,并将堆栈跟踪输出到控制台。
正如我之前所说的,这只是一个语法错误:.then块中缺少右括号。
毕竟,我不知道为什么节点没有像以前那样打印堆栈跟踪。
我将进一步调查,但从此类错误中学习的一件事可能是使用linter编写javascript代码,或者更进一步,然后使用TypeScript。我使用TypeScript使用Angular开发客户端,并且尽早发现语法错误的可能性很大。
答案 2 :(得分:0)
app.listen(5010,function(){
console.log("server is running on port 5010");
});
//添加上面的代码以解决此问题
答案 3 :(得分:0)
在处理另一个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 都没有区别-但是在这里 确实如此 似乎有所不同。也许其他节点应用程序的某些缓存设置(即使用index.js作为主要脚本并使用 app 作为该文件中的对象的那些设置)被保留并以某种方式引用。>
这里有Nodemon精通的人来解释这个吗?
答案 4 :(得分:0)
如果仍然有人对此存在问题,我该如何解决我的问题是我发现数据库未连接,因此我正在使用mongodb进行设置,因此请使用mongod命令设置mongo并使用任一节点app.js再次运行服务器或nodemon app.js修复了我的问题
答案 5 :(得分:0)
解决方案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”:“ 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 ”,...}。 这样可以解决您的问题。
答案 6 :(得分:0)
如果您使用快速生成器,您的程序将在浏览器上显示拒绝连接的错误,而不是在终端上尝试此代码
<块引用>npm 启动 要么 nodemon 启动
答案 7 :(得分:0)
经过数小时寻找解决方案,为什么我在 docker 中的生产节点构建总是立即停止并退出 0,我发现 docker-images 的节点版本不兼容。如果您在 docker 中遇到此问题,请尝试不同的节点版本
答案 8 :(得分:0)
我也遇到过同样的问题。
节点版本为 14.15.5。
所以安装了 node 12.22 版本并且工作正常。