ExpressJS - Небольшое любопытство - PullRequest
0 голосов
/ 11 апреля 2020

Моя вещь - небольшой проект.

В основном то, что он делает, это то, что "сервер" получит вызов по ссылке напрямую, что запустит некоторые функции, которые обновят базу данных и данные, которые имеют чтобы быть показанным.

Я покажу, что я имею в виду:

function updateData(){
  connection.query(`SELECT * FROM muzica WHERE melodie = "${updateList()}"`, function (error, rezultat, fields) {
      if (error) {console.log('err la selectare')};

          //express output
          let data = {
            melodie: rezultat[0].melodie,
            likes: rezultat[0].likes
          }

            console.log(data.likes);

            app.get('/like', (req,res) =>{
              res.json(`${data.likes}`);

        });
  } 
  setInterval(()=>{
    updateData();
  }, 20000)

Э-э, как это объяснить, я так плох в этом ...

Так В основном, я новичок в бэк-энде, все, что я делал, основывалось на их документации, так как я учусь намного быстрее, чем некоторые руководства и т. д.

Итак, когда я или кто-то еще мой http://website/like должен показывать только data.likes, потому что это все, что мне нужно, не считайте data.melod ie (я уберу это позже) после того, как я закончу sh весь код. В любом случае, когда я делаю сайт / лайк, data.likes не обновляется до новой базы данных data.likes.

Например, ранее data.likes были 5, через несколько минут это может быть 2, но всякий раз, когда я звоню веб-сайт / лайк показывают "5", чем его новое значение 2.

Не будь со мной sh, я новичок и хочу узнать как можно больше, но не могу Я понимаю, что в приведенном выше случае по моим логикам c ВСЕГДА должно показывать, что находится в базе данных, когда обновляется каждые 10 секунд (я запускаю это на локальном хосте, поэтому не буду напрягать ни один онлайн-сервер). Но если есть какой-то лучший способ проверить наличие обновлений баз, чем setInterval, пожалуйста, обратите на меня внимание. Трудно учиться одному без наставника или кого-то еще, чтобы говорить об этом домене.

Спасибо за потраченное время!

С уважением, Pulsy

Ответы [ 2 ]

0 голосов
/ 11 апреля 2020

Конечные точки должны быть вне каких-либо функций в express.

Например, если вы посмотрите на express пример "hello world" здесь , вы увидите, что у них есть базовое приложение c, в котором определена только одна конечная точка GET это "/", поэтому вы можете получить к нему доступ, запустив "localhost /" или "127.0.0.1/".

. В вашем случае вы хотите, чтобы ваша конечная точка была" / like ", поэтому вы должны определить что-то как:

const express = require('express')
const app = express()
const port = 3000        
app.listen(port, () => console.log(`Example app listening at http://localhost:${port}`))
app.get('/like', (req, res) => {
   // do database stuff and assign data variable
   // res.json(data);
}
0 голосов
/ 11 апреля 2020

У вас есть вещи немного наизнанку. Обработчик запросов, такой как app.get('/like', ...), находится на верхнем уровне, и вы вызываете его только один раз. Этот оператор регистрирует обработчик событий для всех входящих запросов с путем /like. Когда сервер получает входящий запрос для /like, он затем вызывает функцию для этого обработчика маршрута.

Затем вы помещаете в этот обработчик маршрута код, который вы хотите запустить для генерации ответа, и отправляете ответ клиенту.

app.get('/like', (req, res) => {
    connection.query(`SELECT * FROM muzica WHERE melodie = "${updateList()}"`, function (error, rezultat, fields) {
        if (error) {
            console.log(error);
            res.sendStatus(500);
        } else {
            //express output
            let data = {
                melodie: rezultat[0].melodie,
                likes: rezultat[0].likes
            }
            res.json(data);
        }
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...