Привет! Я создаю базовую c анкету на веб-сайте реагирования с полным стеком, который я создаю с использованием React, express и sql.
В настоящий момент все, что я пытаюсь сделать, это вернуться сообщение об ошибке отреагировать и заставить мой фронтэнд показать его.
Это моя конечная точка express.
app.post("/post-question-answers", async (req, res) => {
console.log("!called");
try {
await sql.connect(config);
// create Request object
let selectedWorkstation = req.body.selectedWorkstation;
var request = new sql.Request();
request.input(`SelectedWorkstation`, sql.NVarChar, selectedWorkstation);
let existingWSA = await request.execute("dbo.CheckIfWSAExists");
if (!existingWSA.recordset.length) {
console.info("hello from first if");
let user = req.body.user;
let results = req.body.results;
let completeToken = req.body.completeToken;
let date = req.body.date;
let questions = [];
let answers = [];
// let emails = [];
let questionIds = [];
let suggestedSoloutions = [];
results.forEach(element => answers.push(element.answer));
results.forEach(element => questions.push(element.question));
// results.forEach(element => emails.push(element.email));
results.forEach(element => questionIds.push(element.questionId));
results.forEach(element =>
suggestedSoloutions.push(element.suggestedSoloution)
);
var request = new sql.Request();
request.input(`QuestionStatus`, sql.NVarChar, completeToken);
request.input(`Date`, sql.NVarChar, date);
request.input(`Email`, sql.NVarChar, user);
request.input(`SelectedWorkstation`, sql.NVarChar, selectedWorkstation);
let result = await request.execute("dbo.AddQuestionResponseHeader");
console.log("HERE");
console.log(result);
if (result.hasOwnProperty("recordset") && result.recordset.length) {
var recordsetRow = result.recordset[0];
if (recordsetRow.hasOwnProperty("createdId")) {
var id = recordsetRow.createdId;
console.log(id);
for (var i = 0; i < results.length; i++) {
var request = new sql.Request();
let answer = answers[i];
let question = questions[i];
// let email = emails[i];
let questionId = questionIds[i];
let soloution = suggestedSoloutions[i];
request.input(`WSAId`, sql.Int, id);
request.input(`Question`, sql.NVarChar, question);
request.input(`Answer`, sql.NVarChar, answer);
request.input(`Email`, sql.NVarChar, user);
request.input(`QuestionId`, sql.NVarChar, questionId);
// request.input(`CompleteToken`, sql.NVarChar, completeToken);
request.input(
`SelectedWorkstation`,
sql.NVarChar,
selectedWorkstation
);
request.input(`SuggestedSoloution`, sql.NVarChar, soloution);
request.execute("dbo.SubmitQuestionResponses", function(
err,
recordset
) {
if (err) console.log(err);
});
}
} else {
console.log("unexpected result format");
}
} else {
console.log("No results found");
}
} else {
// HERE is what I am asking about
console.info("This account exists");
let errorMessage =
"This Workstation currently has an assessment in progress";
res.status(409).json({
errorMessage: errorMessage
});
}
} catch (e) {
console.log(e);
}
});
Так что это работает нормально, ответ находится в пределах финальной, иначе (где комментарий). Это достигается, когда рабочая станция существует и работает нормально. Затем я пытаюсь передать это сообщение об ошибке в этом другом месте.
Это мой оператор извлечения в моей функции отправки ответов
submitAnswers() {
let selectedWorkstation = window.localStorage.getItem("Workstation");
let user = window.localStorage.getItem("User");
let completeToken = "";
let declinedCounter = 0;
if (questionCounter == this.state.questions.length) {
var today = new Date(),
date = `${today.getUTCFullYear()}-${today.getUTCMonth() +
1}-${today.getUTCDate()} ${today.getHours()}:${today.getMinutes()}:${today.getSeconds()}.${today.getMilliseconds()} `;
for (var i = 0; i < results.length; i++) {
if (results[i].answer == "P") {
declinedCounter++;
} else {
}
}
if (declinedCounter > 0) {
completeToken = "In Progress";
} else if (declinedCounter <= 0) {
completeToken = "Complete";
}
console.log(completeToken);
const data = {
completeToken,
results,
selectedWorkstation,
date,
user: user
};
fetch("/post-question-answers/", {
method: "POST", // or 'PUT'
headers: {
Accept: "application/json,",
"Content-Type": "application/json"
},
body: JSON.stringify(data)
}).then(({ errorMessage }) => {
this.setState({ errorMessage: errorMessage });
alert(this.setState.errorMessage);
// Here is what I am referencing
if (this.setState.errorMessage.length > 2) {
alert("test1");
} else if (this.setState.errorMessage.length < 2) {
alert("test2");
}
});
window.location.href = "http://localhost:3000/completed-assessment";
} else {
alert("Please enter all of The questions");
}
}
Это сообщение об ошибке сработало один или два раза при первом использовании. Тогда он либо не определен, либо ничего не предупреждает.
Я ищу причину, по которой это не отображается каждый раз, когда существует рабочая станция. Как это обычно не определено или не будет отображаться вообще.
Любая помощь будет принята с благодарностью.