Повторный рендеринг шаблона EJS в js экспресс-узла

#javascript #node.js #express #discord.js #ejs

#javascript #node.js #экспресс #discord.js #ejs

Вопрос:

Итак, я использую discord.js наряду с express, и я хочу, чтобы моя веб-страница обновлялась всякий client.on("message") раз, когда запускается. Насколько я знаю и из исследований, единственным возможным способом визуализации шаблона ejs был запрос get, так как же мне поступить с этим.

это мой index.js

 const express = require("express")
const https = require('https')
const Discord = require('discord.js')
const config = require('./config.json')
const app = express()
const bodyParser = require("body-parser")
app.set("view engine", "ejs")
app.use(express.static("public"))

const client = new Discord.Client();

client.on("message", function(message) { 
    console.log(message.author.username   " : "  message.content)    
    // I want a res.render("index", {data : message.author.username   " : "  message.content })       //equivalent here           
}); 

app.get('/', (req, res) => {
    res.render("index", {data : "EMPTY"}) 
})


app.listen(8000, () => {
    console.log("Running")
})

client.login(config.BOT_TOKEN);
 

Комментарии:

1. Это невозможно сделать, поскольку обе эти вещи происходят в событиях (например, сообщение discord и запрос GET), поэтому вы не можете принудительно обновлять пользователя, если вы не используете сеансы или веб-сокеты.

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

Ответ №1:

Это можно сделать с помощью сокета.io Первая установка socket.io npm i socket.io Затем обновите свое приложение, чтобы использовать сокет.механизм ввода-вывода.

 const app = express();
const http = require('http').Server(app);
const io = require('socket.io')(http);
const Discord = require('discord.js')
const config = require('./config.json')
const bodyParser = require("body-parser")
 

Обновите «индексный» файл. Убедитесь, что текст, который вы пытаетесь обновить, имеет id="count" .

     <script src="/socket.io/socket.io.js"></script>
    <script>
      var socket = io();
      socket.on('count', function(data){
        $('#count').html(data.count);
      });
    </script>
 

Теперь, наконец, команда обновления.

 client.on("message", function(message) { 
    console.log(message.author.username   " : "  message.content)
    data = message.author.username   " : "  message.content
    io.sockets.on('connection', function(sockets){
    sockets.emit('count',{count:data});
})      
});