我正在开发一个项目,其中我的 Vue.js 是我的前端,我的 Next.js 是我的后端。一切似乎都很顺利,但我不知道如何将我的模型数据返回到我的控制器......
更多信息:
这是我的控制器(recetteController.js),我在其中调用 findAllRecette() :
// import { Recette } from '../../models/recette';
const { Recette } = require('../../models/recette');
// const Recette = require('../../models/recette');
console.log(Recette);
export default async function handler(req, res) {
try {
const recettes = await Recette.getAllRecette();
res.status(200).json(recettes);
} catch (error) {
res.status(500).json({ error: 'Erreur lors de la récupération des recettes' });
}
}
这是我的模型(recette),我的函数 getAllRecette() 在哪里:
'use strict';
const { Model } = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class Recette extends Model {
static associate(models) {
Recette.belongsTo(models.Difficulte, { foreignKey: 'id_difficulte', as: 'difficulte' });
Recette.belongsTo(models.Categorie, { foreignKey: 'id_categorie', as: 'categorie' });
}
// Récupère toutes les recettes
static async getAllRecette() {
console.log("CONGRATS");
const recettes = await this.findAll();
return recettes;
}
}
Recette.init({
nom: DataTypes.STRING,
description: DataTypes.STRING,
portion: DataTypes.INTEGER,
temps: DataTypes.INTEGER,
id_difficulte: DataTypes.INTEGER,
id_categorie: DataTypes.INTEGER,
image: DataTypes.TEXT
}, {
sequelize,
modelName: 'Recette',
});
return Recette;
};
除了 Laravel 之外,我以前从未这样做过,也许我做错了......(MVC)
问题是 console.log(Recette) 给了我一个 '未定义' 或 '[函数(匿名)]',具体取决于我如何导入 Recette
我还尝试直接在我的控制器中调用 findAll() 但这并没有改变我的控制器找不到我的模型的事实。
请我花了太多时间来解决这个问题!谢谢!
方法如下:使用 import {} 而不是 require() 并在 js 文件中添加到数据库的连接,如下所示:
//database.js
import { Sequelize } from 'sequelize';
const sequelize = new Sequelize('db_name', 'user', 'password', {
host: 'host_name',
dialect: 'dialect', //ex:postgres
logging: console.log, //activate sequelize log
});
(async () => {
try {
await sequelize.authenticate();
console.log('Database connection successfully established.');
} catch (error) {
console.error('Error connecting to the database :', error);
}
})();
export default sequelize;
然后在模型文件中使用此文件,如下所示:(从“数据库”导入续集;)
//model.js
import { DataTypes, Model } from 'sequelize';
import sequelize from 'database';
class MyClass extends Model {
static associate(models) {
}
}
export default (sequelize) => {
Recette.init({
name: DataTypes.STRING,
description: DataTypes.STRING,
//...
}, {
sequelize,
modelName: 'MyClass',
});
return MyClass;
};
export { MyClass };
那么控制器应该看起来像这样:
import {MyClass} from '../models/myClass';
export default async function handler(req, res) {
try {
const datas = await MyClass.findAll();
res.status(200).json(datas);
} catch (error) {
res.status(500).json({ error: 'Error while fetching datas' });
}
};