노드를 만드는 방법오류가 발생해도 JS는 계속됩니까?
간단한 로그인/등록 앱을 만들고 있습니다.로그인 부분을 테스트하고 있습니다.그러나 잘못된 로그인을 입력할 때마다 백엔드(에 기록됨)NodeJS
그리고.Express
) 충돌 및 정지합니다.
이전에 SQL에서 다음과 같은 오류가 반환될 때마다 코드에서 오류가 발생했습니다.
con.query("SELECT * FROM table_name WHERE username=" + usernameGiven, function(er, result) {
if (er) throw er;
return result;
}
이것은 효과가 있었지만 위에서 말한 것처럼 문제가 있었습니다.그래서 저는 그것을 제거했습니다.throw er
분할하여 로 대체함console.log(er)
하지만 여전히 노드.JS가 중지되고 추가 로그인 시도로 인해CORS
오류
그러면 어떻게 하면 실행을 중지하고 로그만 기록하고 다음 요청으로 계속 진행할 수 있을까요?
편집:
나는 노력했다.try
그리고.catch
아래와 같이:
try {
con.query(sql_query, function(er, result) {
if (er) {
console.log(er);
}
response.json(result);
})
} catch (er) {
console.log(er);
}
그러나 여전히 오류가 표시됩니다.
/home/x/CodeOver/LoginForm/api/node_modules/mysql/lib/protocol/Parser.js:437
throw err; // Rethrow non-MySQL errors
^
TypeError: Cannot read property 'password' of undefined
at Query.<anonymous> (/home/x/CodeOver/LoginForm/api/api.js:43:37)
at Query.<anonymous> (/home/x/CodeOver/LoginForm/api/node_modules/mysql/lib/Connection.js:526:10)
이러한 유형의 오류에 대해 코드를 보다 강력하게 만들기 위해 약간의 리팩터링을 제안합니다.
이러한 상황에서 try...catch 블록은 실제로 쿼리 오류를 감지하지 못하지만, 다른 오류가 발생할 경우에는 해당 오류를 그대로 두겠습니다.
쿼리할 때도 여기서 매개 변수를 사용해야 합니다.SQL 주입 공격은 나쁜 소식이며 매개 변수를 사용하면 쿼리에서 구문 오류가 발생할 가능성이 줄어듭니다.
만약 우리의 usernameGiven이 없다면 나는 또한 일찍 실패하고 400 오류를 되돌릴 것입니다.
여기 업데이트된 코드가 있습니다, 도움이 되길 바랍니다!
try {
if (!usernameGiven) {
response.status(400).send("Bad Request");
return;
}
let sql_query = "select * from table_name where username = ?";
con.query(sql_query, [usernameGiven], function(er, result) {
if (er) {
console.error("Error occurred:", er);
response.status(500).send("Internal Server Error")
} else {
response.json(result);
}
})
} catch (er) {
console.error("Error occurred:", er);
}
언급URL : https://stackoverflow.com/questions/62323718/how-to-make-nodejs-carry-on-even-if-an-error-occurs
'programing' 카테고리의 다른 글
Ajax와 함께 MVC 4를 사용한 파일 업로드 (0) | 2023.08.29 |
---|---|
창 위치 변경 Jquery (0) | 2023.08.29 |
PowerShell에서 오류의 줄 번호를 가져오는 방법 (0) | 2023.08.29 |
중복 키 + 자동 증분 문제 mysql (0) | 2023.08.24 |
MySQL: 다른 datetime 필드에 datetime 삽입 (0) | 2023.08.24 |