Mongoose .insertOne() 不工作(没有给出错误信息)
Mongoose .insertOne() not working (no error message given)
我正在使用 node.js 编写一个简单的登录/注册程序,该程序将帐户详细信息(用户名、电子邮件和密码)存储在 MongoDB 数据库中。我确定我已正确下载 MongoDB,但我无法弄清楚我的代码有什么问题...没有抛出任何错误,但 name
、email
,并且 hashedPassword
没有被插入到用户数据库中。
这是我的 server.js 文件中的代码:
if (process.env.NODE_ENV !== 'production') {
require('dotenv').config()
}
const express = require('express')
const app = express()
const bcrypt = require('bcrypt')
const passport = require('passport')
const flash = require('express-flash')
const session = require('express-session')
const methodOverride = require('method-override')
const userArray = [];
const mongoose = require('mongoose')
mongoose.connect(process.env.DATABASE_URL, { useNewUrlParser: true })
const db = mongoose.connection
db.on('error', error => console.error(error))
db.once('open', () => console.log('Connected to Mongoose'))
const initializePassport = require('./passport-config')
initializePassport(
passport,
email => users.find(user => user.email === email),
id => users.find(user => user.id === id)
)
app.set('view-engine', 'ejs')
app.use(express.urlencoded({ extended: false }))
app.use(flash())
app.use(session({
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: false
}))
app.use(passport.initialize())
app.use(passport.session())
app.use(methodOverride('_method'))
app.get('/', checkAuthenticated, (req, res) => {
res.render('index.ejs', { name: req.user.name })
})
app.get('/login', checkNotAuthenticated, (req, res) => {
res.render('login.ejs')
})
app.post('/login', checkNotAuthenticated, passport.authenticate('local', {
successRedirect: '/',
failureRedirect: '/login',
failureFlash: true
}))
app.get('/register', checkNotAuthenticated, (req, res) => {
res.render('register.ejs')
})
//**THE PROBLEM IS SOMEWHERE HERE I THINK**
app.post('/register', checkNotAuthenticated, async (req, res) => {
console.log("Before try")
try {
const hashedPassword = await bcrypt.hash(req.body.password, 10)
console.log("Password hashed")
userArray.push({
name: req.body.name,
email: req.body.email,
password: hashedPassword
})
console.log("pushed to array")
db.users.insertOne({
"name": req.body.name,
"email": req.body.email,
"password": hashedPassword
})
console.log("New user loaded to DB!")
console.log(req.body.name);
console.log(req.body.email);
console.log(hashedPassword);
res.redirect('/login')
} catch {
res.redirect('/register')
}
})
app.delete('/logout', (req, res) => {
req.logOut()
res.redirect('/login')
})
function checkAuthenticated(req, res, next) {
if (req.isAuthenticated()) {
return next()
}
res.redirect('/login')
}
function checkNotAuthenticated(req, res, next) {
if (req.isAuthenticated()) {
return res.redirect('/')
}
next()
}
app.listen(3000)
我在 app.post('/register', checkNotAuthenticated, async (req, res) => {}
部分遇到了问题
我记录了它的每个步骤行,这是控制台中出现的内容:
[nodemon] restarting due to changes...
[nodemon] starting `node server.js`
Connected to Mongoose
Before try
Password hashed
pushed to array
因此,如您所见,除了将用户信息插入数据库外,一切正常(我也知道,因为 运行 db.users.find() 在 Mongo shell returns 什么都没有)...请帮忙:'(
将用户信息添加到用户数据库时出现语法错误。而不是:
db.users.insertOne({
"name": req.body.name,
"email": req.body.email,
"password": hashedPassword
})
应该是:
db.collection("users").insertOne({
"name": req.body.name,
"email": req.body.email,
"password": hashedPassword
})
我正在使用 node.js 编写一个简单的登录/注册程序,该程序将帐户详细信息(用户名、电子邮件和密码)存储在 MongoDB 数据库中。我确定我已正确下载 MongoDB,但我无法弄清楚我的代码有什么问题...没有抛出任何错误,但 name
、email
,并且 hashedPassword
没有被插入到用户数据库中。
这是我的 server.js 文件中的代码:
if (process.env.NODE_ENV !== 'production') {
require('dotenv').config()
}
const express = require('express')
const app = express()
const bcrypt = require('bcrypt')
const passport = require('passport')
const flash = require('express-flash')
const session = require('express-session')
const methodOverride = require('method-override')
const userArray = [];
const mongoose = require('mongoose')
mongoose.connect(process.env.DATABASE_URL, { useNewUrlParser: true })
const db = mongoose.connection
db.on('error', error => console.error(error))
db.once('open', () => console.log('Connected to Mongoose'))
const initializePassport = require('./passport-config')
initializePassport(
passport,
email => users.find(user => user.email === email),
id => users.find(user => user.id === id)
)
app.set('view-engine', 'ejs')
app.use(express.urlencoded({ extended: false }))
app.use(flash())
app.use(session({
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: false
}))
app.use(passport.initialize())
app.use(passport.session())
app.use(methodOverride('_method'))
app.get('/', checkAuthenticated, (req, res) => {
res.render('index.ejs', { name: req.user.name })
})
app.get('/login', checkNotAuthenticated, (req, res) => {
res.render('login.ejs')
})
app.post('/login', checkNotAuthenticated, passport.authenticate('local', {
successRedirect: '/',
failureRedirect: '/login',
failureFlash: true
}))
app.get('/register', checkNotAuthenticated, (req, res) => {
res.render('register.ejs')
})
//**THE PROBLEM IS SOMEWHERE HERE I THINK**
app.post('/register', checkNotAuthenticated, async (req, res) => {
console.log("Before try")
try {
const hashedPassword = await bcrypt.hash(req.body.password, 10)
console.log("Password hashed")
userArray.push({
name: req.body.name,
email: req.body.email,
password: hashedPassword
})
console.log("pushed to array")
db.users.insertOne({
"name": req.body.name,
"email": req.body.email,
"password": hashedPassword
})
console.log("New user loaded to DB!")
console.log(req.body.name);
console.log(req.body.email);
console.log(hashedPassword);
res.redirect('/login')
} catch {
res.redirect('/register')
}
})
app.delete('/logout', (req, res) => {
req.logOut()
res.redirect('/login')
})
function checkAuthenticated(req, res, next) {
if (req.isAuthenticated()) {
return next()
}
res.redirect('/login')
}
function checkNotAuthenticated(req, res, next) {
if (req.isAuthenticated()) {
return res.redirect('/')
}
next()
}
app.listen(3000)
我在 app.post('/register', checkNotAuthenticated, async (req, res) => {}
部分遇到了问题
我记录了它的每个步骤行,这是控制台中出现的内容:
[nodemon] restarting due to changes...
[nodemon] starting `node server.js`
Connected to Mongoose
Before try
Password hashed
pushed to array
因此,如您所见,除了将用户信息插入数据库外,一切正常(我也知道,因为 运行 db.users.find() 在 Mongo shell returns 什么都没有)...请帮忙:'(
将用户信息添加到用户数据库时出现语法错误。而不是:
db.users.insertOne({
"name": req.body.name,
"email": req.body.email,
"password": hashedPassword
})
应该是:
db.collection("users").insertOne({
"name": req.body.name,
"email": req.body.email,
"password": hashedPassword
})