Как обновить sh конечную точку API без перезапуска моего Express. js проекта - PullRequest
0 голосов
/ 17 марта 2020

Я делаю API для моего Discord Bot, который позволяет вам получать данные о чьем-то уровне и 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 - это успешно , enter image description here Примечание: пожалуйста, игнорируйте ноль, это полностью означает, что данные ожидают сбора и будут отображаться там в конце концов, когда кто-то заработает очки опыта и уровни.

Нет ошибки с код, он работает так, как должен. Поэтому мне интересно, как я могу получить данные для автоматического обновления без перезапуска проекта. Я пытался использовать методы setInterval и setTimeout, но мне не удалось это сработать.

Хорошо, я знаю, что меня раздражает каждый раз перезапускаться, чтобы показать данные, но я просто хочу знаю, смогу ли я сделать

1 Ответ

1 голос
/ 17 марта 2020

Вы назначаете один результат запроса, который будет возвращен вашим маршрутом /api/leveldb, поэтому результат всегда будет таким же. Переместите выборку данных из хранилища данных в динамическую c выборку на основе запроса.

Кроме того, ваш 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 Маршрутизация также может помочь.

...