collection.save() 在 mongodb 中无法正常工作



.save(( 什么都不做,你能帮我解决这个问题吗?在这里,是我的代码片段

猫鼬连接

const dbOptions = {
useNewUrlParser: true,
useUnifiedTopology: true
}
const connection = mongoose.createConnection(process.env.DB_URL, dbOptions, () => { console.log('connected to db') })
const sessionStore = new MongoStore({ mongooseConnection: connection, collection: 'sessions' })
app.use(session({
secret: process.env.SECRET,
resave: false,
saveUninitialized: true,
store: sessionStore,
cookie: {
maxAge: 300
}
}))

用户架构

const mongoose = require('mongoose')
const UserSchema = new mongoose.Schema({
username: {
type: String,
unique: true,
required: true
},
hash: {
type: String
},
salt: {
type: String
}
}, {
timestamps: true
})
module.exports = mongoose.model('Users', UserSchema)

路由此处代码执行,直到创建哈希和盐 我尝试使用控制台语句,但没有进一步执行任何操作。

var express = require('express')
var router = express.Router()
const User = require('../models/User')
const passport = require('passport')
const genPassword = require('../passwordUtil').genPassword
/* GET users listing. */
router.get('/', async function (req, res) {
try {
const findusers = await User.find()
res.json(findusers)
} catch (err) {
res.json({ message: err })
}
})
router.post('/register', (req, res) => {
const salthash = genPassword(req.body.password)
const hash = salthash.hash
const salt = salthash.salt
const user = new User({
username: req.body.username,
hash: hash,
salt: salt
})
try {
const saveduser = user.save()
res.json(saveduser)
} catch (err) {
res.json({ message: err })
}
})
router.post('/login', passport.authenticate('local'), (req, res, next) => {})
module.exports = router

另外,Idk 如果这是必需的,但这是我的应用程序.js文件,如果您发现任何问题,请告诉我。在我看来,这是健康的,但可以肯定的是。请查看此内容并让我知道。应用.js

var createError = require('http-errors')
var express = require('express')
var path = require('path')
var cookieParser = require('cookie-parser')
var logger = require('morgan')
const mongoose = require('mongoose')
require('dotenv/config')
const bodyparser = require('body-parser')
const cors = require('cors')
const session = require('express-session')
const passport = require('passport')
const MongoStore = require('connect-mongo')(session)
require('./authenticate')
var indexRouter = require('./routes/index')
var usersRouter = require('./routes/users')
var app = express()
// view engine setup
app.set('views', path.join(__dirname, 'views'))
app.set('view engine', 'pug')
app.use(logger('dev'))
app.use(express.json())
app.use(express.urlencoded({ extended: false }))
app.use(cookieParser())
app.use(express.static(path.join(__dirname, 'public')))
app.use(cors())
app.use(bodyparser.json())
const dbOptions = {
useNewUrlParser: true,
useUnifiedTopology: true
}
const connection = mongoose.createConnection(process.env.DB_URL, dbOptions, () => { console.log('connected to db') })
const sessionStore = new MongoStore({ mongooseConnection: connection, collection: 'sessions' })
app.use(session({
secret: process.env.SECRET,
resave: false,
saveUninitialized: true,
store: sessionStore,
cookie: {
maxAge: 300
}
}))
app.use(passport.initialize())
app.use(passport.session())
app.use('/', indexRouter)
app.use('/api/users', usersRouter)
// catch 404 and forward to error handler
app.use(function (req, res, next) {
next(createError(404))
})
app.use(function (err, req, res, next) {
res.locals.message = err.message
res.locals.error = req.app.get('env') === 'development' ? err : {}
res.status(err.status || 500)
res.render('error')
})
module.exports = app

你的代码中有一个小错误。

我的意思是你代码的这一部分:

try {
const saveduser = user.save()
res.json(saveduser)
} catch (err) {
res.json({ message: err })
}

如您所知,与数据库的交互是异步节点的。因此,如果要将保存的用户放在savedUser变量中,则必须使用await.如果您不使用await则得到undefined响应。

这是正确的代码:

await user.save()

更新

整个代码将是这样的(使用 async/await(:

router.post('/register', async (req, res) => {
const salthash = genPassword(req.body.password)
const hash = salthash.hash
const salt = salthash.salt
const user = new User({
username: req.body.username,
hash: hash,
salt: salt
})
try {
await user.save();
res.json(user);
} catch (err) {
res.json({ message: err })
}
})

并使用承诺:

router.post('/register', (req, res) => {
const salthash = genPassword(req.body.password)
const hash = salthash.hash
const salt = salthash.salt
const user = new User({
username: req.body.username,
hash: hash,
salt: salt
})
user.save().then(() => {
const savedUser = user;
res.json(saveduser);
}).catch(err => {
res.json({ message: err })
})
})

最新更新