Fis*_*ies 1 javascript ejs mongodb node.js express
我正在尝试检查用户是否在我的 mongodb 数据库中,但我不断收到错误:Operation users.findOne()buffering timed out after 10000ms。我尝试了很多事情,但似乎无法让它发挥作用。请帮忙。
服务器.js
const express = require('express');
const app = express();
const dotenv = require('dotenv').config();
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const path = require('path');
const cookieParser = require("cookie-parser");
const indexRoute = require('./routes/index');
const authRoute = require('./routes/auth');
mongoose.connect(process.env.DB_CONNECT, { useNewUrlParser: true }, () => {
console.log('Connected to MongoDB');
});
app.use(express.json());
app.use(cookieParser());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(express.static(__dirname + '/views'));
app.use(express.static('Public'));
app.set('view engine', 'ejs');
app.set("views", path.join(__dirname, "views"));
app.disable('x-powered-by');
app.use('/', indexRoute);
app.use('/auth', authRoute);
app.get('/login', (req, res) => {
res.render('login/index.ejs', {
loginError: req.cookies['loginError'],
});
});
app.listen(3000, () => console.log('Server Up and running'));
Run Code Online (Sandbox Code Playgroud)
auth.js
const express = require('express');
const router = express.Router();
const jwt = require('jsonwebtoken');
const User = require('../models/User');
const bcrypt = require("bcryptjs");
const { loginValidation } = require('../validation');
router.post('/login', async(req, res) => {
//Validate Data
const { error } = loginValidation(req.body);
if (error) {
let msg = error.message.replace(/["]/g, '')[0].toUpperCase() + error.message.replace(/["]/g, '').slice(1) + '!';
return res.cookie('loginError', msg, [{ httpOnly: true }]).redirect('/login');;
}
const user = await User.findOne({ email: req.body.email });
if (!user) {
let msg = 'Invalid email or password!'
return res.cookie('loginError', msg, [{ httpOnly: true }]).redirect('/login');;
}
const validPass = await bcrypt.compare(req.body.password, user.password);
if (!validPass) {
let msg = 'Invalid email or password!'
return res.cookie('loginError', msg, [{ httpOnly: true }]).redirect('/login');;
}
const token = jwt.sign({ _id: user._id }, process.env.TOKEN_SECRET);
res.header('auth-token', token).redirect('/dashboard');
});
module.exports = router;
Run Code Online (Sandbox Code Playgroud)
.env
DB_CONNECT = not putting the url for security but this is where i have my mongodb connection url
Run Code Online (Sandbox Code Playgroud)
抱歉,如果这是一个愚蠢的问题。任何帮助表示赞赏。
小智 6
我认为您没有正确等待数据库连接。尝试重构这个
mongoose.connect(process.env.DB_CONNECT, { useNewUrlParser: true }, () => { console.log('连接到 MongoDB'); });
进入这个
const connectDatabase = async () => {
try {
mongoose.set("useNewUrlParser", true);
await mongoose.connect(process.env.DB_CONNECT);
console.log("connected to database");
} catch (error) {
console.log(error);
process.exit(1);
}
};
connectDatabase();
Run Code Online (Sandbox Code Playgroud)
另外,您在本地托管数据库吗?我也想尝试一下,Atlas有时会带来麻烦。
除此之外,我真的不知道,抱歉,希望它有帮助。
| 归档时间: |
|
| 查看次数: |
6824 次 |
| 最近记录: |