gpt4 book ai didi

javascript - 需要 Sequelize 模型类时,module.exports undefined,什么是正确的结构?

转载 作者:行者123 更新时间:2023-12-03 22:34:36 24 4
gpt4 key购买 nike

我正在关注 sequelize 文档以获得一个简单的 sqlite3 db,在文档中,每件事似乎都在一个文件中,但是对于路由,我需要在不同地方使用这些类。
我的 index.js

const express = require("express");
const applyApi = require("./src/routes").applyApi;
const { Sequelize, DataTypes, Model } = require("sequelize");
const sequelize = new Sequelize({
dialect: "sqlite",
storage: "./database.sqlite",
});

class User extends Model {}
class UserFavourite extends Model {}

User.init(
{
// Model attributes are defined here
firstName: {
type: DataTypes.STRING,
allowNull: false,
},
lastName: {
type: DataTypes.STRING,
// allowNull defaults to true
},
email: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
},
passwordDigest: {
type: DataTypes.STRING,
allowNull: false,
},
},
{
// Other model options go here
sequelize, // We need to pass the connection instance
modelName: "User", // We need to choose the model name
}
);

UserFavourite.init(
{
movieRefId: {
type: DataTypes.INTEGER,
allowNull: false,
},
movieTitle: {
type: DataTypes.STRING,
allowNull: false,
},
moviePosterPath: {
type: DataTypes.STRING,
allowNull: false,
},
seen: {
type: DataTypes.BOOLEAN,
defaultValue: false,
},
description: {
type: DataTypes.TEXT,
},
},
{
// Other model options go here
sequelize, // We need to pass the connection instance
modelName: "UserFavourite", // We need to choose the model name
}
);

User.hasMany(UserFavourite);

const app = express();
applyApi(app);

app.get("/", (req, resp) => {
resp.send("test");
});

(async () => {
try {
await sequelize.authenticate();
console.log("Connection has been established successfully.");
} catch (error) {
console.error("Unable to connect to the database:", error);
}
await sequelize.sync({ force: true });
app.listen(3001, () => {
console.log("Server started on port 3001");
});
})();

exports.models = {User, UserFavourite};
然后我导入类,让我们在用户路由器中说,现在它只是一个硬编码用户创建的测试:
const userRouter = require("express").Router();
const models = require("../../../index");

userRouter.get("/", async (req, res) => {
console.log(typeof models)
console.log(models)
try{
const user = await models.models.User.create({
firstName: 'Bla',
lastName: 'BLABLA',
email: 'a@a.a',
passwordDigest: 'lklkl'
})
console.log(user)
res.send("OK")

} catch (e) {
console.log(e)
res.status(404).send("Error")
}
});

exports.userRouter = userRouter;
正如你所看到的,我必须做 models.models.User 等。如果尝试
const { models } =require("../../../index"); 
或者
const models = require("../../../index").models;
模型在控制台日志中未定义,此时我不知道为什么,console.log 上方文件中的代码片段为 { models: { User: User etc... } } 并且工作正常:models.model .User.create({用户数据})
根据我的理解,模型类不需要实例化,比如 user = new User(),它只是类方法。我不介意像现在这样使用它,但我不明白这里发生了什么,谁能解释一下发生了什么?
我的第二个问题是,什么是带有 sequelize 的好的文件夹结构,以便将每个类都放在自己的文件夹中并导入它,我在想像 Rails 中的 Controller 了解模型的东西,老实说我是“翻译”一个 Rails API,我必须更好地与 NodeJS 一起使用。
我在 stackoverflow 上唯一发现的是这个链接 https://github.com/sequelize/express-example 但它已经有 3 年历史了,显然不适用于 sequelize v6,而且我也不太明白模型文件夹中发生了什么。
谢谢你的时间。

最佳答案

一个好的文件夹结构应该是这样的。

├── models
│   ├── user.js
│ ├── userfavourites.js
│   ├── index.js


//example model

'use strict';
module.exports = (sequelize, DataTypes) => {
const user = sequelize.define('user', {
movieRefId: {
type: DataTypes.INTEGER,
allowNull: false,
},
movieTitle: {
type: DataTypes.STRING,
allowNull: false,
},
moviePosterPath: {
type: DataTypes.STRING,
allowNull: false,
},
seen: {
type: DataTypes.BOOLEAN,
defaultValue: false,
},
description: {
type: DataTypes.TEXT
},
});
user.associate = function(models) {
// associations can be defined here
};
return user;
};


现在无论你想在哪里使用你的模型。
const models = require('<path>/models');
const UserModel = models.user;

关于javascript - 需要 Sequelize 模型类时,module.exports undefined,什么是正确的结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62627442/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com