无法使用POST请求重定向Node.js

3

我在前端有一个按钮,允许用户更新他们的个人资料照片(使用Cloudinary API),我基本上调用了我的nodejs post请求并传递了用户数据,以便它可以查询数据库并更新个人资料照片的URL。这个功能很好,但是在调用该函数后它没有重定向/渲染页面。

这是我的前端代码(包含 Cloudinary 和 js):

<input type="hidden" name="" id="employee_num" value="<%= data[i].EMPLOYEE_NUM %>">

<script src="https://widget.cloudinary.com/v2.0/global/all.js" type="text/javascript"></script>

<script type="text/javascript">
    var myWidget = cloudinary.createUploadWidget({
            cloudName: 'xxx',
            uploadPreset: 'xxx'}, (error, result) => {
            if (!error && result && result.event === "success") {
                console.log('Done! Here is the image info: ', result.info);
                console.log(result.info.secure_url)
                var result_url = result.info.secure_url;
                console.log("result url is " + result_url)
                document.getElementById("url").value = result_url;
                var employee_num = document.getElementById('employee_num').value;

                fetch('/changeProfileImage', {
                    method: 'POST',
                    headers: {'Content-Type': 'application/json'},
                    body: JSON.stringify({
                        result_url,
                        employee_num
                    })
                })
            }
        }
    )

    document.getElementById("upload_widget").addEventListener("click", function(){
        myWidget.open();

    }, false);
</script>

现在下面是我用于发出POST请求/changeProfileImage的Node.js函数

app.post('/changeProfileImage', (req, res) => {
    if (req.session.loggedin) {
        var employee_num = req.body.employee_num;
        var url = req.body.result_url;
        console.log("e " + employee_num)
        console.log("u " + url)

        var changeProfileImage = "update EMPLOYEES set (PROFILE_IMAGE)= '" + url + "' where EMPLOYEE_NUM = '" + employee_num + "'";
        ibmdb.open(ibmdbconnMaster, function (err, conn) {
            if (err) return console.log(err);
            conn.query(changeProfileImage, function (err, rows) {
                if (err) {
                    console.log(err);
                }

                res.redirect('/account');

                conn.close(function () {
                });
            })
        })
    } else {
        res.render('login.ejs')
    }
})

抱歉代码有点乱,但上面的代码是必要的。基本上在我的控制台显示它更新了一切,并且成功地执行了,这是真的,但是它从来没有刷新。有任何想法吗?

1个回答

1
事实上,您正在进行AJAX调用,因此js正在向服务器发出HTTP请求,而不是整个页面,因此您需要在fetch的回调函数中手动执行它:
fetch('/changeProfileImage', {
                    method: 'POST',
                    headers: {'Content-Type': 'application/json'},
                    body: JSON.stringify({
                        result_url,
                        employee_num
                    })
}).then(response => {
    if (response.redirected) {
        window.location.href = response.url;
})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接