【问题标题】:ejs how to send a variable to sequelize?ejs如何发送一个变量来续集?
【发布时间】:2020-03-29 12:11:23
【问题描述】:

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

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

这很好用,我得到了我想要的数据。但我也想将它发送到我的数据库。为此,我使用续集。 我首先尝试这样做来更新我的数据库:

                $('#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 变量添加到我的数据库中。有什么办法可以做到吗?

【问题讨论】:

    标签: node.js express sequelize.js ejs


    【解决方案1】:

    你对客户端和服务器的关系有很大的误解。 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)
        }
    
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 2011-10-26
      • 1970-01-01
      • 2021-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多