三层架构简述

三层架构简述

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);

上传是为了方便自用学习,如果有不对的地方,希望看见的朋友能留言指出来,不胜感激。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值