繁体   English   中英

如何在不重新启动 Express.js 项目的情况下刷新 API 端点

[英]How do I refresh API endpoint without restarting my Express.js project

我正在为我的 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 方法,但无法解决。

好吧,我知道每次重新启动以显示数据会很烦人,但我只想知道我是否可以这样做

您正在分配由/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也可能有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM