在 express 节点 js 中重新渲染 EJS 模板

Posted

技术标签:

【中文标题】在 express 节点 js 中重新渲染 EJS 模板【英文标题】:Re-Render EJS template in express node js 【发布时间】:2021-04-27 21:04:06 【问题描述】:

所以我将 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);

【问题讨论】:

这无法完成,因为这两种情况都发生在事件中(例如不和谐消息和 GET 请求),因此您无法强制更新用户,除非您使用会话或 websockets。 你能告诉一个解决方案吗,因为这对于我想要实现的目标非常必要 【参考方案1】:

这可以使用socket.io完成首先安装socket.io npm i socket.io 然后更新您的应用程序以使用 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);
)      
); 

【讨论】:

以上是关于在 express 节点 js 中重新渲染 EJS 模板的主要内容,如果未能解决你的问题,请参考以下文章

Express 和 ejs <%= 渲染 JSON

node.js 的页面渲染方法ejs

在node.js中使用ejs的demo 第五篇

如何在 Node.js 和 Express 上的同一个 .ejs 文件上呈现 MySQL 查询的多个结果?

如何在修改后在节点js中重新加载项目

在 node.js/express 中使用 EJS 显示图像