【发布时间】:2021-09-17 10:10:32
【问题描述】:
正如我从 console.logs 中知道的那样,我有一个正在访问的路由设置。但是,最后的 res.sendFile 并没有将其带到正确的位置。它会将我发送到 localhost:XXXX/?。
这是路线:
router.get('/bidder', async (req, res) => {
console.log('GET /bidder')
console.log(req.session.user_id)
try {
const userData = await User.findByPk(req.session.user_id, {
attributes: { exclude: ['password'] },
include: [
{
model: Project,
attributes: ['project_name'],
through: Bid,
as: 'project_users'
}
],
});
console.log(path.join(__dirname, '/../public', '/bidder.html'))
res.sendFile(path.join(__dirname, '/../public', '/bidder.html',), function (err) {
if (err) {
console.log(err)
}
})
} catch (err) {
console.log(err)
res.status(500).json(err);
}
});
这是让我到达上面 /bidder 路线的路线:
router.post('/login', async (req, res) => {
console.log('POST /login');
try {
const user = await User.findOne({ where: { email: req.body.email } });
if (!user) {
res
.status(400)
.json({ message: 'Incorrect email or password, please try again.' });
return;
}
const validPassword = await user.checkPassword(req.body.password);
if (!validPassword) {
res
.status(400)
.json({ message: 'Incorrect email or password, please try again.' });
return;
}
req.session.save(() => {
console.log(user);
console.log(user.id);
console.log(user.is_poster);
req.session.user_id = user.id;
req.session.is_poster = user.is_poster;
req.session.logged_in = true;
console.log(req.session.logged_in)
if (req.session.is_poster == false) {
console.log('---------------------------')
console.log(req.session.is_poster)
console.log(path.join(__dirname, '/../public/bidder.html'))
res.redirect('/bidder')
} else if (req.session.is_poster == true) {
console.log('---------------------------')
console.log(req.session.is_poster)
console.log(path.join(__dirname, '/../public/poster.html'))
res.redirect('/poster')
} else {
console.log('not logged in')
res.redirect('/')
}
});
} catch (err) {
console.log(err);
res.status(404).end();
}
});
它记录的错误是:
Error: Request aborted
at onaborted (C:\Users\camer\Desktop\homework\project-bid-board\node_modules\express\lib\response.js:1025:15)
at Immediate._onImmediate (C:\Users\camer\Desktop\homework\project-bid-board\node_modules\express\lib\response.js:1067:9)
at processImmediate (internal/timers.js:464:21) {
code: 'ECONNABORTED'
}
如果我只是在浏览器中输入 localhost:XXXX/bidder,它会将我发送到正确的 html 页面,这是应该的。
编辑 这是与提交登录数据相关的JS:
$('#login-button').on('click', function(event) {
event.preventDefault();
var email = $('#login-email').val()
var password = $('#login-password').val()
loginUser(email, password)
})
const loginUser = async (email, password) => {
const response = await fetch (`/api/user/login`, {
method: 'POST',
body: JSON.stringify({ email, password }),
headers: { 'Content-Type': 'application/json' },
})
console.log(response.statusText)
}
这是它正在处理的形式:
<form>
<div>
<label for="username">E-mail / Username:</label>
<input class="text-input" id="login-email" type="text" placeholder="me@example.com" />
</div>
<div>
<label for="password">Password:</label>
<input class="text-input" type="text" id="login-password" placeholder="password"></input>
</div>
<section>
<button class="btn-lg btn-block" id="login-button">Login</button>
<div class="text-center" id="signupSuccessMsg"></div>
</section>
</form>
【问题讨论】:
-
您是否在 Javascript 中通过 Ajax 调用发送
/login路由?我问是因为 Ajax 调用默认情况下不遵循重定向。除非您编写自己的 Javascript 来执行此操作,否则它们不会更改浏览器中显示的内容。 -
@jfriend00 我不是。
-
那么
/login路由在哪里被触发?通过什么? -
req.session.save()是否有可能出现您没有错误处理程序的错误? -
在您收到错误之前来自
/login路由的日志是什么?
标签: javascript node.js express express-session