gpt4 book ai didi

javascript - NodeJS 更新 API - 内部服务器错误

转载 作者:搜寻专家 更新时间:2023-10-31 23:59:21 26 4
gpt4 key购买 nike

是时候让大人物来解决这个问题了,因为我似乎无法弄清楚。
我在 Node 中有一个简单的 CRUD API。我在前端使用 EJS。本质上,我有一个 selectAllRecords View ,我在其中显示所有记录的表格。我在每条记录旁边都有一个按钮来编辑记录。单击该按钮时,它会重定向到 editrecord.ejs 页面,点击 API 获取单个记录,其中每一行都显示为输入框中的一个值。从那里,我有一个 onclick 方法和一个 XMLHttpRequest 发出放置请求以更新数据库。但是,我收到一个错误 - 500(内部服务器错误) - 我确定这是我遗漏的相当简单的事情,但我似乎无法弄清楚。

非常感谢任何帮助!代码如下:

首先是我的观点:

<script type="text/javascript">
function someFunc() {
var id = <%= id %>;
var url = '/api/edit/' + candID;
console.log('url ' + url);
var name = document.getElementById("name").value;
var email = document.getElementById("email").value;

var data = {
name: name,
email: email,
}
var json = JSON.stringify(data);
console.log('json ' + json);
var xhr = new XMLHttpRequest();
xhr.open("PUT", url, true);
xhr.setRequestHeader('Content-type', 'application/json; charset=utf-8');
xhr.send(json);
};

在我的 queries.js 文件中:

function updateCandidate(req, res, next) {
var candID = parseInt(req.params.id);
console.log('hit update');
console.log('name ' + req.body.name);
db.none('update cands set name=$1, email=$2 where id=$3',
[req.body.name, req.body.email, candID])
.then(function () {
var candID = candID
var name = data.name;
var email = data.email;
res.render("edited", {"candID":candID, "name":name, "email":email});
})
.catch(function (err) {
return next(err);
});
}

一个潜在的重要注意事项,当我点击更新按钮并执行 someFunc() 函数时,开发工具日志显示对“api/edit/50”(或任何 ID)和“500(内部服务器错误)”的 PUT 请求)' -- 如果我硬重新加载 'getAllRecords' View ,更新会被反射(reflect)出来,所以这是渲染或重定向的问题(我都试过了)

编辑

按照建议,我从 updateCandidate 方法中删除了渲染,但我仍然收到 500 内部服务器错误。 devtools 告诉我 PUT 请求命中了正确的 URL,所以我真的不确定为什么它不能正常工作。更新了下面的代码...

function updateCandidate(req, res, next) {
var candID = parseInt(req.params.id);
db.none('update cands set name=$1, email=$2, client=$3, jobtitle=$4, question1=$5, question2=$6, question3=$7 where id=$8',
[req.body.name, req.body.email, req.body.client,
req.body.jobtitle, req.body.question1, req.body.question2, req.body.question3, candID])
.then(function (data, err) {
res.status(200)
.json({
status: 'success',
message: `Edited Candidate`
});
})
.catch(function (err) {
return next(err);
});
}

最佳答案

您正在发送 ajax 请求来更新记录。因此,您不应尝试呈现 View 或重定向 用户作为此请求的响应。相反,您可以发回具有某些属性的 JSON 对象,例如“状态”。

然后在客户端,您检查返回的 JSON 响应并根据“status”参数(或您选择的任何其他参数),您可以更新数据或使用 window.reload 重新加载页面在客户端。

关于javascript - NodeJS 更新 API - 内部服务器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41354958/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com