操作 users.findOne() 缓冲在 10000 毫秒后超时
Operation users.findOne() buffering timed out after 10000ms
我正在尝试检查用户是否在我的 mongodb 数据库中,但我不断收到错误消息:操作 users.findOne()
缓冲在 10000 毫秒后超时.我已经尝试了很多东西,但我似乎无法让它工作。请帮忙。
server.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'));
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;
.env
DB_CONNECT = not putting the url for security but this is where i have my mongodb connection url
抱歉,如果这是一个愚蠢的问题。感谢任何帮助。
我认为您没有正确等待数据库连接。尝试重构这个
mongoose.connect(process.env.DB_CONNECT, { useNewUrlParser: true }, () => {
console.log('Connected to 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();
此外,您是否在本地托管您的数据库?我也想试试,阿特拉斯有时会出问题。
除此之外,我真的不知道,抱歉,希望对您有所帮助。
尝试使用 FIND 而不是 findOne
user.find({email: req.body.email })
我正在尝试检查用户是否在我的 mongodb 数据库中,但我不断收到错误消息:操作 users.findOne()
缓冲在 10000 毫秒后超时.我已经尝试了很多东西,但我似乎无法让它工作。请帮忙。
server.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'));
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;
.env
DB_CONNECT = not putting the url for security but this is where i have my mongodb connection url
抱歉,如果这是一个愚蠢的问题。感谢任何帮助。
我认为您没有正确等待数据库连接。尝试重构这个
mongoose.connect(process.env.DB_CONNECT, { useNewUrlParser: true }, () => { console.log('Connected to 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();
此外,您是否在本地托管您的数据库?我也想试试,阿特拉斯有时会出问题。
除此之外,我真的不知道,抱歉,希望对您有所帮助。
尝试使用 FIND 而不是 findOne
user.find({email: req.body.email })