三层架构简述
1,表示层 :主要是对用户的请求接受,数据的返回,为客户端提供应用程序的访问
2,业务逻辑层:主要负责对数据库的操作,将对数据库的操作进行组合
3,数据访问层:看数据层是否包含逻辑处理,这里面的各个函数主要是完成对各个文件的操作,不需要去管别的操作
简单实现
说一下怎么通过Express实现一个简单的服务器端的三层架构
通过Express脚手架创建如下的目录结构
这是我已经搭建好的目录,选中的utils文件夹是我个人添加的一些代码,用于自己使用的一些小函数,生成时是没有的。
dao:数据访问层
routes:表示层
service:业务逻辑层
public:静态文件资源目录
数据流向的大致过程
客户端请求——》routes——》service——》dao——》数据库——》dao——》service——》routes——》客户端
下面,我来写一个简单的事例,分别在对应的文件夹建立一个文件,命名随意,我这里都以student命名,数据库使用的是mongoose
//dao文件夹下建立一个数据模型文件夹,将涉及的数据模型建立出来
let mongoose = require("mongoose");
let studentSchema = mongoose.Schema(
{
name: String, //名字
gender: String, //性别
age: String, //年龄
},
{ versionKey: false }
);
let studentModel = mongoose.model("student", petsSchema);
module.exports = studentModel;
//dao文件夹下的db.js,用于连接数据库
let mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/student', { useUnifiedTopology: true, useNewUrlParser: true });
let db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function () {
console.log("we're connected!");
});
require('./moudles/studentModel');
//dao
let studentModel = require()
let dao = {};
dao.findstudent = () =>{
console.log("666")
}
module.exports = dao;
//routes
var express = require('express');
var router = express.Router();
let studentService = require("../service/student");
router.get('/findstudent', async function (req, res, next) {
studentService.getstudent()
})
module.exports = router;
//service
let studentDao = require("../dao/student");
let service = {};
service.getstudent=()=>{
studentDao.findstudent()
}
module.exports = service;
做到这里,就只差具体的方法实现了,大家需要记住的是,dao层才能访问数据库,获取数据,其他的都是为了传递数据。
还要记住,要在app.js文件注册router
var createError = require("http-errors");
var express = require("express");
var path = require("path");
var cookieParser = require("cookie-parser");
var logger = require("morgan");
require("./dao/db");
//引入文件
var studentRouter = require("./routes/student")
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
//中间件
app.use(logger('dev'));//注册
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));//静态代理
//路由--更具路径名称进行导航
app.use("student",studentRouter);
上传是为了方便自用学习,如果有不对的地方,希望看见的朋友能留言指出来,不胜感激。