私はそれを把握しているように見えないので、これについては大きな銃を呼び出す頃です。
私はノードに単純なCRUD APIを持っています。私はEJSをフロントエンドで使用しています。本質的に、私はすべてのレコードのテーブルを表示するselectAllRecords
ビューを持っています。レコードを編集するために各レコードの横にボタンがあります。ボタンをクリックするとeditrecord.ejs
ページにリダイレクトされ、各行が入力ボックスに値として表示される単一レコードのAPIが表示されます。そこから、XMLHttpRequestでデータベースを更新するためのput要求を行う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を実行します( )関数では、devツールログに 'api/edit/50'(または何らかのID)と '500(内部サーバーエラー)'というPUTリクエストが表示されます。 - 'getAllRecords'ビューをハードリロードした場合、それはレンダリングまたはリダイレクトの問題です(私は両方を試しました)
EDIT
示唆したように、私は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ループに関するまったく関係のないページから奇妙なエラーが発生しました。しかしDBは更新されました。 – jsw324