e js как отправить переменную для секвелирования? - PullRequest
0 голосов
/ 29 марта 2020

Я делаю заявление node js express. и я использую e js как мой шаблонизатор. в одном из моих файлов js у меня есть вид дерева. это древовидное представление имеет событие, когда что-то меняется в нем. я использую это событие, чтобы получить структуру древовидного представления.

$('#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 передается из моего индекса. js файл, где находятся все мои маршруты. но e js не может получить доступ к переменной v, поскольку e js запускается раньше, чем javascript. Поэтому мне нужен способ получить эту переменную v в моей базе данных. Есть ли способ, которым я могу это сделать?

1 Ответ

2 голосов
/ 29 марта 2020

У вас очень большое непонимание отношений между клиентом и сервером. E JS не может ничего "отправлять" куда-либо - я просто шаблонизатор. Он динамически создает строку HTML, которая позже используется Express для отправки в ваш браузер, как документ HTML (наряду с файлами / кодом JS, конечно). После этого E JS «перестает» существовать, так сказать.

Чтобы отправить данные от вашего 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);
        });
});

Ваш маршрут express, где обрабатывается этот запрос:

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)
    }

})
...