【问题标题】:cannot redirect using post request nodejs无法使用发布请求 nodejs 重定向
【发布时间】:2021-06-08 00:13:17
【问题描述】:

我的前端有一个按钮,允许用户更新他们的个人资料照片(使用 Cloudinary api),我基本上调用我的 nodejs 发布请求并将用户数据传递给它,以便它可以查询数据库并更新个人资料照片网址。效果很好,但在调用该函数后它不会重定向/呈现页面。

这是我的前端(使用 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>

现在下面是我的发布请求/changeProfileImage的nodejs函数

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

请原谅我的代码乱七八糟,但以上就是所需的一切。它基本上在我的控制台中说它更新了所有内容,并成功通过了,这是真的,但它永远不会刷新。有什么想法吗?

【问题讨论】:

    标签: javascript sql node.js cloudinary


    【解决方案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;
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-08
      • 1970-01-01
      • 2017-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      相关资源
      最近更新 更多