如何在不重新启动我的 Express.js 项目的情况下刷新 API 端点
Posted
技术标签:
【中文标题】如何在不重新启动我的 Express.js 项目的情况下刷新 API 端点【英文标题】:How do I refresh API endpoint without restarting my Express.js project 【发布时间】:2020-06-28 17:14:48 【问题描述】:我正在为我的 Discord Bot 创建一个 API,它可以让您获取有关某人级别和 XP 的数据。然而,它成功了。这有一个主要缺陷,那就是为了正确更新 JSON 对象中的数据。我的机器人必须重新启动。
代码如下:
const http = require('http');
const express = require('express');
const app = express();
const db = require("quick.db")
let index = 0;
app.get("/", (request, response) =>
response.sendStatus(200);
);
app.listen(process.env.PORT);
setInterval(() =>
http.get(`http://$process.env.PROJECT_DOMAIN.glitch.me/`);
, 20000);
require('./index.js')
let levelldb = db.all().filter(data => data.ID.startsWith(`Leveling`)).sort((a, b) => b.data - a.data);
levelldb.length = 10;
var levelldbs = function ()
app.get('/api/levelldb', async function (req, res)
res.send(levelldb)
)
console.log(`Refreshed`)
levelldbs();
这是我尝试访问 website.com/api/levelldb 时的样子 - 成功。 注意:请忽略空值,这完全意味着数据正在等待收集,最终会在有人获得经验和等级时显示。
代码没有错误,它可以正常工作。所以我想知道如何在不重新启动项目的情况下让数据自动更新。我尝试使用 setInterval 和 setTimeout 方法,但无法解决。
我知道每次重新启动以显示数据会很烦人,但我只想知道我是否可以这样做
【问题讨论】:
【参考方案1】:您正在分配由/api/leveldb
路由返回的单个查询结果,因此结果始终相同。将您从数据存储中提取的数据移动到根据请求进行动态提取。
此外,您的 app.get('route_name_here') 不需要包装到函数中。那是您想要从您的 api 返回的数据的外部访问点。
app.get('/api/levelldb', async function (req, res)
let levelldb = db.all()
.filter(data => data.ID.startsWith(`Leveling`))
.sort((a, b) => b.data - a.data);
levelldb.length = 10;
res.send(levelldb)
阅读Express Routing 可能也会有所帮助。
【讨论】:
这似乎解决了我的问题。此外,我必须修复最后一行(右花括号)上的语法错误,现在应该可以解决问题了!谢谢。以上是关于如何在不重新启动我的 Express.js 项目的情况下刷新 API 端点的主要内容,如果未能解决你的问题,请参考以下文章
如何在不重新启动 apache 的情况下为站点重新加载 apache 配置?
如何启用调试 express.js/node.js 应用程序
如何在超级终端中停止运行 Node.js (Express) 服务器
如何在不重新启动的情况下卸载 Windows 服务并删除其文件