"Invalid status code" 当在数据库中找不到用户时
"Invalid status code" when the user is not found in the database
我正在尝试使用快速会话制作一个简单的登录系统,但当在数据库中找不到用户时,我一直收到“无效状态代码”。
我想做的是当在数据库中找不到用户时,它将客户端重定向到特定的路由。但是它没有重定向客户端,而是抛出了一个错误。
如果找到用户,它工作得很好,没有错误。
如果有人能帮助指导我解决问题,那将不胜感激!
登录路线
//@ROUTE: Log in route
//@DESCRIPTION: Renders the login page
app.get('/login', (req, res)=> {
res.render('login.ejs', {title: "Login :: Clipit", curSession: req.session})
})
登录post
//@ROUTE: Log in post
//@DESCRIPTION: Finds the user in the database, and logs him in (creates a new session)
app.post('/api/login', (req, res)=> {
const username = req.body.inputUsername
const password = req.body.inputPassword
userDB.findOne({username: username, password: password}, (err, result)=> {
if(err) {
throw err;
} else if(!result) {
res.redirect('/login-error', {curSession: req.session})
} else {
req.session.username = result.username
req.session.loggedIn = true
console.log(`${req.session.username} has logged in.`)
res.redirect('/')
}
})
})
错误:
express deprecated res.redirect(url, status): Use res.redirect(status, url) instead server.js:185:17
node:events:346
throw er; // Unhandled 'error' event
^
RangeError [ERR_HTTP_INVALID_STATUS_CODE]: Invalid status code: { curSession: [Session] }
at new NodeError (node:internal/errors:329:5)
at ServerResponse.writeHead (node:_http_server:282:11)
at ServerResponse.writeHead (C:\Users\gabri\Desktop\clipit\node_modules\on-headers\index.js:44:26)
at ServerResponse._implicitHeader (node:_http_server:273:8)
at writetop (C:\Users\gabri\Desktop\clipit\node_modules\express-session\index.js:276:15)
at ServerResponse.end (C:\Users\gabri\Desktop\clipit\node_modules\express-session\index.js:356:16)
at ServerResponse.redirect (C:\Users\gabri\Desktop\clipit\node_modules\express\lib\response.js:951:10)
at C:\Users\gabri\Desktop\clipit\server.js:185:17
at C:\Users\gabri\Desktop\clipit\node_modules\mongoose\lib\model.js:4870:18
at processTicksAndRejections (node:internal/process/task_queues:76:11)
Emitted 'error' event on Function instance at:
at C:\Users\gabri\Desktop\clipit\node_modules\mongoose\lib\model.js:4872:15
at processTicksAndRejections (node:internal/process/task_queues:76:11) {
code: 'ERR_HTTP_INVALID_STATUS_CODE'
}
PS C:\Users\gabri\Desktop\clipit>
您的控制台中出现 1 个错误和 1 个警告:
警告:express deprecated res.redirect(url, status): Use res.redirect(status, url) instead server.js:185:17.
这是关于参数的顺序。现在他们可以按任何顺序工作。但这也会提示您导致错误的原因。 res.redirect() 的参数应该是 status
和 url
.
您不能将对象添加到参数中。它必须是 status code
和 path
。
您可能想要 res.render('/login-error', {curSession: req.session})
(取决于您的观点)或只是 res.redirect('/login-error')
.
我正在尝试使用快速会话制作一个简单的登录系统,但当在数据库中找不到用户时,我一直收到“无效状态代码”。
我想做的是当在数据库中找不到用户时,它将客户端重定向到特定的路由。但是它没有重定向客户端,而是抛出了一个错误。
如果找到用户,它工作得很好,没有错误。
如果有人能帮助指导我解决问题,那将不胜感激!
登录路线
//@ROUTE: Log in route
//@DESCRIPTION: Renders the login page
app.get('/login', (req, res)=> {
res.render('login.ejs', {title: "Login :: Clipit", curSession: req.session})
})
登录post
//@ROUTE: Log in post
//@DESCRIPTION: Finds the user in the database, and logs him in (creates a new session)
app.post('/api/login', (req, res)=> {
const username = req.body.inputUsername
const password = req.body.inputPassword
userDB.findOne({username: username, password: password}, (err, result)=> {
if(err) {
throw err;
} else if(!result) {
res.redirect('/login-error', {curSession: req.session})
} else {
req.session.username = result.username
req.session.loggedIn = true
console.log(`${req.session.username} has logged in.`)
res.redirect('/')
}
})
})
错误:
express deprecated res.redirect(url, status): Use res.redirect(status, url) instead server.js:185:17
node:events:346
throw er; // Unhandled 'error' event
^
RangeError [ERR_HTTP_INVALID_STATUS_CODE]: Invalid status code: { curSession: [Session] }
at new NodeError (node:internal/errors:329:5)
at ServerResponse.writeHead (node:_http_server:282:11)
at ServerResponse.writeHead (C:\Users\gabri\Desktop\clipit\node_modules\on-headers\index.js:44:26)
at ServerResponse._implicitHeader (node:_http_server:273:8)
at writetop (C:\Users\gabri\Desktop\clipit\node_modules\express-session\index.js:276:15)
at ServerResponse.end (C:\Users\gabri\Desktop\clipit\node_modules\express-session\index.js:356:16)
at ServerResponse.redirect (C:\Users\gabri\Desktop\clipit\node_modules\express\lib\response.js:951:10)
at C:\Users\gabri\Desktop\clipit\server.js:185:17
at C:\Users\gabri\Desktop\clipit\node_modules\mongoose\lib\model.js:4870:18
at processTicksAndRejections (node:internal/process/task_queues:76:11)
Emitted 'error' event on Function instance at:
at C:\Users\gabri\Desktop\clipit\node_modules\mongoose\lib\model.js:4872:15
at processTicksAndRejections (node:internal/process/task_queues:76:11) {
code: 'ERR_HTTP_INVALID_STATUS_CODE'
}
PS C:\Users\gabri\Desktop\clipit>
您的控制台中出现 1 个错误和 1 个警告:
警告:express deprecated res.redirect(url, status): Use res.redirect(status, url) instead server.js:185:17.
这是关于参数的顺序。现在他们可以按任何顺序工作。但这也会提示您导致错误的原因。 res.redirect() 的参数应该是 status
和 url
.
您不能将对象添加到参数中。它必须是 status code
和 path
。
您可能想要 res.render('/login-error', {curSession: req.session})
(取决于您的观点)或只是 res.redirect('/login-error')
.