由於我似乎無法解決這個問題,因此我需要大量的時間來調用這個大槍。
我在Node中有一個簡單的CRUD API。我在前端使用EJS。基本上,我有一個selectAllRecords
視圖,其中顯示所有記錄的表格。我在每條記錄旁邊都有一個按鈕來編輯記錄。點擊該按鈕後,它將重定向到editrecord.ejs
頁面,點擊API查看單個記錄,其中每行顯示爲輸入框中的值。從那裏,我有一個XMLHttpRequest的onclick方法提出更新數據庫的請求。然而,我收到一個錯誤 - 500 (Internal Server Error)
- 我確定這是一個相當簡單的東西,我錯過了,但我似乎無法弄清楚。NodeJS更新API - 內部服務器錯誤
任何幫助,非常感謝!下面的代碼:
首先對我的看法:
<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( )函數,開發工具日誌顯示一個PUT請求'api/edit/50'(或任何ID)和'500(內部服務器錯誤)' - 如果我硬重新加載'getAllRecords'視圖,更新反映如此這是渲染或重定向的問題(我已經試過)
編輯
至於建議,我刪除從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);
});
}
你用郵遞員這樣的工具測試你的api嗎? – kkreft
錯誤是什麼? – aug2uag
我用一個CURL請求進行了測試,並從一個完全無關的網頁中得到了一個奇怪的錯誤,該網頁提供了一個很好的for循環。數據庫確實更新了。 – jsw324