请是 Nodejs 的新手,但我正在尝试使用 sequelize 将数据插入到我的数据库中,但我无法读取属性 .create of undefined。
这是我的index.js文件
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,
config.USER,
config.PASSWORD,
{
host: config.HOST,
dialect: config.dialect,
operatorsAliases: false,
pool: {
max: config.pool.max,
min: config.pool.min,
acquire: config.pool.acquire,
idle: config.pool.idle
}
});
fs
.readdirSync(__dirname)
.filter((file) =>
file !== 'index.js'
)
.forEach((file) => {
const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes)
// db[model] = model
db.User = model
})
db.sequelize = sequelize
db.Sequelize = Sequelize
module.exports = db;
这是我的Model/User.js文件
module.exports = (sequelize, DataTypes) => {
sequelize.define('User', {
hmtec_email: {
type: DataTypes.STRING,
unique: true
},
hmtec_password: DataTypes.STRING
})
这是我的Controllers/AuthController.js文件
const {User} = require ('../models/User')
module.exports = {
async register (req, res) {
try {
const user = await User.create(req.body)
res.send(user.toJSON())
} catch (err) {
console.log(err);
res.status(400).send({
error: 'Email already in Use'
})
}
}
我不知道代码有什么问题,我不知道为什么会收到 .create 的错误未定义
答案 0 :(得分:0)
我认为您的问题出在最后一个文件中.. AuthController.js
const {User} = require ('../models/User')
您正在使用 Es6 新的销毁赋值
此处有更多信息https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment
通常你应该定义没有括号的变量
这意味着您获得了所有可用的变量。
但是添加括号意味着您要获取对象的孩子,这个孩子被命名为 user .. 然后将变量也命名为 user 并搜索这些信息 来自相等之后的 require 文件。
但是在您的用户文件中 .. 您正在导出一个函数 .. 没有任何名为 user 的孩子 因此未定义
更好的选择是使用类
更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes
所以在用户模型中
// Inside your function you need to use sequalize module , iam not familar with it but you must require it to use it
const Sequelize = require('sequelize');
// Define the Class
class user {
// add the name you want to use for the function - here I used create so the other code also work - also I inserted async because this is asynchronous and also I removed the sequalize from parameters because you don't need it now after it is required above.
async create (DataTypes) => {
await Sequelize.define('User', {
hmtec_email: {
type: DataTypes.STRING,
unique: true
},
hmtec_password: DataTypes.STRING
})
}
module.exports = user;
现在当你需要 Authcontroller 中的文件时,删除括号
const User = require ('../models/User')
现在您可以在 authController.js 中使用 User.create(YOUR_DATA_VARIABLE);
如果这个类中有任何其他函数,你也可以以同样的方式使用它们。
我希望这能解决您的问题。