Это время, когда я звоню в большие пушки для этого, так как я не могу понять это.
У меня есть простой CRUD API в узле. Я использую EJS на front-end. По сути, у меня есть вид selectAllRecords
, где я показываю таблицу всех записей. У меня есть кнопка рядом с каждой записью, чтобы отредактировать запись. Когда кнопка нажата, она перенаправляется на страницу editrecord.ejs
, попадает в API для одной записи, где каждая строка отображается как значение в поле ввода. Оттуда у меня есть метод onclick с XMLHttpRequest, создающий запрос на обновление базы данных. Тем не менее, я получаю сообщение об ошибке - 500 (Internal Server Error)
- Я уверен, что это что-то довольно просто, я пропала без вести, но я не могу понять это.NodeJS Update 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» (или любой другой идентификатор) и «500 (Внутренняя ошибка сервера)». Если я сильно перезагружаю представление 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