如何将HTML按钮连接到Express服务器删除路由?

问题描述 投票:0回答:1

我有一个 Express 服务器,其中包含删除(心理学)实验的路线。 (我已将路线分成多个文件。该路线位于 admin.js 中,因此其完整路线路径为 /admin/experiments/:expId)

router.route('/experiments/:expId')
    .delete(tokens.verifyToken, adminValidator.isAdmin, (req, res) => {
        const experimentId = req.params.expId;
        const db = req.db;
        db.removeExperiment(experimentId);
        renderExperiments(req, res, db);
    })

function renderExperiments(req, res, db) {
    let allExps = expStandard.getAllExperiments(db);

    res.render('adminExperiments', {
        allExps: allExps,
        approved_flag: APPROVED_EXPERIMENT,
        pending_flag: PENDING_EXPERIMENT
    });
}

此路由从数据库中删除实验,然后调用呈现关联的 adminExperiments.ejs 视图的方法。这是一个仅创建 HTML 表的 EJS 模板。表的每一行对应一个实验。在每一行中我都包含了一个删除按钮。每个删除按钮都与单击该按钮时的事件监听器相关联:

表格中的一行显示有关给定实验的信息

这是在客户端执行的相关js脚本(adminExperiments.js)中的代码:

document.addEventListener('DOMContentLoaded', registerDeleteExpListeners);


function registerDeleteExpListeners() {
    let deleteButtons = document.querySelectorAll('.btn_exp_delete');
    for (b of deleteButtons) {
        b.addEventListener("click", deleteExperiment);
    }
}

async function deleteExperiment(event) {
    // ???
}

问题: 我在事件监听器 deleteExperiment() 中使用什么来连接到我的 Express 路线?

我尝试使用带有“delete”方法标头的 Fetch 并将其发送到路由的 URL (/admin/experiments/:expId)。尽管我可以向路由发送删除请求并且该请求已被接收,但它不会呈现 adminExperiments.ejs。相反,会发送回状态为 200 的响应对象。这很好,但这不是我想要的。我想要一个带有更新的实验列表的新页面。

html button ejs http-delete nodejs-express-server
1个回答
0
投票

显然,这不能用 Fetch 来完成。 Fetch 的作用正如它所说:它获取数据。它不会重定向/呈现新页面。

为此,我在使用 fetch 发出删除请求后添加了这行代码:

window.location.replace('/admin/experiments');

换句话说,我必须手动将窗口指向不同的 URL。

© www.soinside.com 2019 - 2024. All rights reserved.