node.js - 第二个用户不创建
问题描述
使用完全不同的登录名创建新用户时,显示我的错误“此登录名已经很忙。尝试另一个。”。
控制台上显示以下内容:
(续集)警告:模型属性(登录名)传递到模型用户的finder方法选项中,但options.where对象为空。您是否忘记使用 options.where?执行(默认):SELECT "id", "login", "password", "createdAt", "updatedAt" FROM "users" AS "users" LIMIT 1; POST /api/auth/register 409 28.183 毫秒 - 84
在什么意义上是“options.where”?
楷模:
module.exports = (sequelize, Sequelize) => {
const User = sequelize.define('users', {
login: {
type: Sequelize.STRING,
required: true,
unique: true
},
password: {
type: Sequelize.STRING,
required: true
}
})
return User
}
控制器:
module.exports.register = async function(req, res) {
const candidate = await User.findOne({
login: req.body.login
})
if (candidate) {
res.status(409).json({
message: 'This login is already busy. Try another.'
})
} else {
const salt = bcrypt.genSaltSync(10)
const password = req.body.password
const user = new User({
login: req.body.login,
password: bcrypt.hashSync(password, salt)
})
try {
await user.save()
res.status(201).json(user)
} catch(e) {
errorHandler(res, e)
}
}
}
护照.js:
const JwtStrategy = require('passport-jwt').Strategy
const ExtractJwt = require('passport-jwt').ExtractJwt
const User = require('../models/user')
const options = {
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
secretOrKey: process.env.SECRET_OR_KEY
}
module.exports = passport => {
passport.use(
new JwtStrategy(options, async (payload, done) => {
try {
const user = await User.findById(payload.userId).select('login id')
if (user) {
done(null, user)
} else {
done(null, false)
}
} catch(e) {
console.log(e)
}
})
)
}
解决方案
该options
对象是模型上的查询函数所期望的对象,例如findOne
(即您传递给该函数的参数 -文档)。属性是一个对象,options.where
它被转换为WHERE
生成的 SQL 查询的一部分。
查看您的代码,我想您想找到登录名等于的用户req.body.login
,在这种情况下,您的代码应如下所示:
const candidate = await User.findOne({
where: {
login: req.body.login
}
})
推荐阅读
- git - 如何获取特定 git 标签后的合并分支列表?
- here-api - 使用折线路由结果沿路线进行 POI 搜索的问题
- reactjs - Material UI:在 React 类组件中使用主题
- phpbb - PHPBB 3.0.1 网站迁移到新的托管服务
- c# - 无法添加实体类型“Publication”的种子实体,因为没有为所需属性“Image”提供值
- python-3.x - 使用 Matplotlib 设置多组次要刻度
- java - Firebase 退出 Google
- arrays - StreamBuilder arrayContains 和 RangeError(index):无效值:有效值范围为空:0
- python-3.x - parse() 缺少 1 个必需的位置参数:'stream'
- c++ - 隐式转换序列的排序[f(int)和f(const int&)]