无法使用 post 请求 nodejs 重定向
cannot redirect using post request nodejs
我的前端有一个按钮,允许用户更新他们的个人资料照片(使用 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
的 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')
}
})
请原谅我的乱七八糟的代码,但上面是所有需要的东西。它基本上在我的控制台中说它更新了所有内容,并成功通过,这是真的,但它永远不会刷新。有什么想法吗?
问题是您正在进行 AJAX 调用,因此 js 正在向服务器发出 HTTP 请求并且它不是整个页面,因此您需要在获取的回调中手动完成:
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;
})
我的前端有一个按钮,允许用户更新他们的个人资料照片(使用 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
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')
}
})
请原谅我的乱七八糟的代码,但上面是所有需要的东西。它基本上在我的控制台中说它更新了所有内容,并成功通过,这是真的,但它永远不会刷新。有什么想法吗?
问题是您正在进行 AJAX 调用,因此 js 正在向服务器发出 HTTP 请求并且它不是整个页面,因此您需要在获取的回调中手动完成:
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;
})