【发布时间】:2021-11-18 11:45:17
【问题描述】:
我遇到了与 sequelize 和 sqlite 一起使用的 Authenticati onController 的问题 当我使用邮递员测试 POST 请求时,它总是给出状态 400 和响应 { 错误:'出了点问题' } 这是日志
::1 - - [21/Jul/2020:15:40:33 +0000] "POST /register HTTP/1.1" 400 30 "-" "PostmanRuntime/7.26.1"
const {User} = require('../models')
module.exports = {
async register(req, res){
try {
const user = await User.create(req.body)
res.send(user.toJSON())
} catch (error) {
console.log(error)
res.status(400).send({
error: 'Something is wrong'
})
}
}
}
用户模型代码
module.exports = (sequelize, DataTypes) =>
sequelize.define('User', {
email: {
type: DataTypes.STRING,
unique: true
},
password: DataTypes.STRING
})
型号索引代码
const fs = require('fs')
const path = require('path')
const Sequelize = require('sequelize')
const config = require('../config/config')
const db = {}
const sequelize = new Sequelize(
config.db.database,
config.db.user,
config.db.password,
config.db.options
)
fs
.readdirSync(__dirname)
.filter((file)=>{
file != 'index.js'
})
.forEach((file)=>{
const model = require(path.join(__dirname, file))(
sequelize,
Sequelize.DataTypes
);
// const model = sequelize.import(path.join(__dirname,file))
db[model.name] = model
})
db.sequelize = sequelize
db.Sequelize = Sequelize
module.exports = db
路线代码
const AuthenticationController = require('./controllers/AuthenticationController');
module.exports = (app) => {
app.post('/register',
AuthenticationController.register)
}
之前,它抛出“TypeError:无法读取未定义的属性'create'”的错误 但是当我重新启动服务器时,这是固定的。但是我不知道为什么 try 块会失败。
任何人都可以对此有所了解吗?谢谢
【问题讨论】:
-
如果 try 块中出现任何错误,注册路由会返回 400 响应。 catch 块中的
err是什么?这是触发 400 响应的问题的起点。 -
感谢您的评论。我通过添加 "console.log(error)" 修改了 catch 块。这一次,我收到错误“TypeError: Cannot read property 'create' of undefined”。请查看添加的图片
-
看起来错误发生在
User.create(req.body)-User变量未定义。 User 变量来自模型索引文件。那么为什么模型索引文件中没有定义 db.User 呢?我没有太多使用sequelize,所以没有明显的问题跳出来。但是,我猜它与模型索引文件或用户模型文件中的 forEach 块有关。 -
你是对的!当我删除 forEach 块并单独定义 db.User 时,它给出了一个错误“TypeError: sequelize.import is not a function”
-
在这里找到了一个类似的线程stackoverflow.com/questions/47080727/… 但是使用“require”的修复也没有解决我的问题
标签: javascript node.js sqlite sequelize.js