Node.js ejs如何发送变量进行续集?

Node.js ejs如何发送变量进行续集?,node.js,express,sequelize.js,ejs,Node.js,Express,Sequelize.js,Ejs,我正在制作一个NodeJSExpress应用程序。我使用ejs作为我的模板引擎。 在我的一个ejs文件中,我有一个树状视图。此树状图中有一个事件,用于在其中发生更改时显示该事件。我使用此事件来获取treeview的结构 $('#tree').on("changed.jstree", async function (e, data) { var v = $('#tree').jstree(true).get_json('#', {flat:true});

我正在制作一个NodeJSExpress应用程序。我使用ejs作为我的模板引擎。 在我的一个ejs文件中,我有一个树状视图。此树状图中有一个事件,用于在其中发生更改时显示该事件。我使用此事件来获取treeview的结构

$('#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%>
                });
$('#tree').on(“changed.jstree”,异步函数(e,data){
var v=$('#tree').jstree(true).get_json('#',{flat:true});
var mytext=JSON.stringify(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)
    }

})

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

})