node.js - ejs如何发送一个变量来 Sequelize ?

标签 node.js express sequelize.js ejs

我正在制作一个 node js express 应用程序。我使用 ejs 作为我的模板引擎。
在我的一个 ejs 文件中,我有一个树 View 。这个树 View 有一个事件,当它发生变化时。我使用这个事件来获取树 View 的结构。

$('#tree').on("changed.jstree", async function (e, data) {
                    var v = $('#tree').jstree(true).get_json('#', {flat:true});
                    var mytext = JSON.stringify(v);
                });

这工作正常并获取我想要的数据。但我也想将它发送到我的数据库。为此,我使用 sequelize。
我首先尝试用这个来更新我的数据库:
                $('#tree').on("changed.jstree", async function (e, data) {
                    var v = $('#tree').jstree(true).get_json('#', {flat:true});
                    var mytext = JSON.stringify(v);
                    <%- world.treeData = v%>
                });

world 是从我的 index.js 文件传递​​的,我的路由所在的位置。但是 ejs 不能访问 v 变量,因为 ejs 在 javascript 之前运行。
所以我需要一种方法来获取这个 v 变量到我的数据库。有没有办法做到这一点?

最佳答案

你对客户端和服务器之间的关系有很大的误解。 EJS 不能“发送”任何东西——我只是一个模板引擎。它动态构造一个 HTML 字符串,Express 稍后使用该字符串作为 HTML 文档(当然还有 JS 文件/代码)发送到您的浏览器。在那之后,可以这么说,EJS“不复存在”了。

为了从 JS 事件监听器发送数据,您需要向服务器中的某个端点执行 AJAX 请求,然后该端点将使用 Sequelize 将其存储在数据库中。我给你举个例子:

假设您要注册一个新用户。你的JS:

$('#tree').on("changed.jstree", async function (e, data) {//Let's say you want to register a new user.
    var v = $('#tree').jstree(true).get_json('#', { flat: true });
    var newUserData = JSON.stringify(v);
    fetch('http://localhost:8000/user', {
        method: 'POST', 
        headers: {
            'Content-Type': 'application/json',
        },
        body: newUserData,
    })
        .then((response) => response.json())
        .then((data) => {
            console.log('Success:', data);
        })
        .catch((error) => {
            console.error('Error:', error);
        });
});

处理此请求的快速路线:
app.post('/user', async function (req, res) {
    try {

        const newUserData = req.body;

        const createdUser = await UserModel.create(newUserData)//This is where Sequelize comes into picture.

        res.json({id:createdUser.id})


    } catch (error) {
        console.log(error)
        res.sendStatus(500)
    }

})

关于node.js - ejs如何发送一个变量来 Sequelize ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60914058/

相关文章:

node.js - 无法使用 n 升级 Node.js

javascript - 如何在nodejs中获取Mac OS计算机名称

node.js - 如何使用 Let's Encrypt 在 Nginx 上创建 SSL 安全反向代理?

node.js - Express NodeJS 服务器中的 HTTP 文件上传

node.js - 使用 Promises 执行多个 Sequelize JS 模型查询方法 - Node

node.js - Sequelize : isNewRecord is always false

angularjs - 我如何开始使用 MEAN.IO?

node.js - 为什么超时作为顶级中间件不好?

mysql - Sequelize N :M ParentModel. setChilds(ChildArray) 不是函数(魔术方法?)

node.js - 如何在 Sequelize 中使用 Case Condition?