关于使用nodejs和mysql的web应用中mvc架构模型的问题

dy2hfwbg  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(309)

我是nodejs的新手,我正在尝试使用expressframework和mysql创建一个web应用程序。我知道在mvc架构中,视图是*.ejs文件。控制器应该有逻辑,模型应该集中在数据库上。
但我还是不太清楚模型里面应该是什么。我的控制器中有以下代码(可能是错误的,没有遵循mvc设计):

const mysql = require('mysql');
const db = mysql.createConnection(config);
db.query(query, (err, result) => {
    if (err) {
        return res.redirect('/');
    }
    res.render('index.ejs', {
        users: result
    });
});

现在,根据我所读的内容,控制器应该要求模型执行对数据库的查询,获得结果并呈现视图(index.ejs')。
我的问题是:model.js文件中应该包含什么?我能做这样的东西吗?
控制器.js

const db = require('./models/model.js');
db.connect();
const results = db.query(query);
if(results != null) {
     res.render('index.ejs'){
          users: result
     });
}

js将对mysql进行查询,以处理任何错误并返回结果。
据我所知,我有两个选择。选项1:将回调函数传递给model并让model呈现视图(我认为这是错误的,model不应该与view通信吗?)选项2:可能使用async/await并等待model返回结果,但我不确定这是否可能或如何实现。

jk9hmnmh

jk9hmnmh1#

模型是数据库中存储的数据的编程表示。假设我有一个 employees 具有以下架构的表:

name: string
age: number
company: company_foreign_key

另一张table叫 companies ```
name: string
address: string

因此,我有两种模式: `Company` 以及 `Employee` .
该模型的目的是加载数据库数据,并提供一个方便的编程接口来访问和处理这些数据
所以,我的控制器可能是这样的:

var db = require('mongo');
var employeeName = "bob";
db.connect(function(err, connection){

const Employee = require('./models/Employee.js'); // get model class

let employeeModel = new Employee(connection); // instantiate object of model class

employee.getByName(employeeName, function(err, result){ // convenience method getByName

employee.getEmployeeCompany(result, function(err, companyResult){ // convenience method getEmployeeCompany

 if(companyResultl) { // Controller now uses the results from model and passes those results to a view

   res.render('index.ejs')
    company: companyResult
 });
})

})
}

})
基本上,该模型为数据库中的原始数据提供了一个方便的接口。该模型执行下面的查询,并提供方便的方法作为控制器访问的公共接口。e、 例如,给定employee对象的employee模型可以通过执行该查询来查找雇员的公司。
以上只是一个例子,如果考虑得更多,可以想出一个更好的接口。事实上,mongoose提供了一个关于如何设置模型接口的好例子。如果您了解mongoose是如何工作的,那么您可以使用相同的原则并将它们应用到您的定制模型实现中。

相关问题