Node Express 搭建MVC三层架构Demo

Node.js

  • Node是一个服务器端JavaScript解释器
  • Node 本身服务器上的JavaScript对于只在客户机上使用JavaScript的程序员而言,服务器端
    JavaScript可能是一个新概念。
  • 什么是V8 ? V8 JavaScript引擎是Google用于其 Chrome浏览器的底层JavaScript 引擎。实
    际上,JavaScript引擎负责解释并执行代码。
  • Node 实际上会使用Google编写的V8 JavaScript引擎,并将其重建为可在服务器上使用。

服务器MVC架构

MVC 三层架构
Node Express 搭建MVC三层架构Demo_第1张图片

Model

  • 业务处理 :业务逻辑(Service)
  • 数据持久层:CRUD (Dao)

View

  • 展示数据
  • 提供链接发起Servlet请求 (a,form,img…)

Controller (Servlet)

  • 接收用户的请求 :(req:请求参数、Session信息….)
  • 交给业务层处理对应的代码
  • 控制视图的跳转
登录--->接收用户的登录请求login.do
      -->路由拦截到login.do并让UserCtrller处理用户的请求
        (获取请求中用户登录的参数,调用dao层方法)
     ---->Dao层首先会对数据进行连接,然后查询用户名和密码是否正确
      -->数据库

数据库 (返回查询的数据)---->dao层拿到数据给controller层(回调函数)
-->controller处理数据,使用reps(发送响应数据报文)给前台浏览器
--->前台拿到数据对数据进行渲染。

Express搭建MVC三层架构

项目目录:
Node Express 搭建MVC三层架构Demo_第2张图片

  • app.js
const myexpress = require("express")  // 1. 导入 express模块
const logger = require("morgan")
const route = require('./routers/indexRouter')


const myapp = myexpress()
myapp.use(logger("dev"))   // 请求信息日志打印在控制台,便于开发调试
myapp.use(myexpress.static(__dirname + "/src"))  //2. 配置前端资源文件src

myapp.use(myexpress.urlencoded({ extended: true }))    // 声明使用解析post请求的中间件
myapp.use(myexpress.json())                            // 将post参数数据转为json格式: {name: tom, pwd: 123}

myapp.use(route)                                  // 4. myapp服务器使用路由,分发任务

myapp.listen(6789, () => {                    // 3.设置服务器监听端口号
    console.log("Express服务器启动")
})

myapp.use(function (req, resp) {
    resp.status(404)
    resp.sendFile(__dirname + "/src/page/404.html") // 转发  url改变
    // resp.redirect("/page/404.html")  // 重定向不需要加/src url不变
})
  • routers
const express = require('express')
const userCtrl = require('../controller/userCtrl')
const router = express.Router() // 创建路由对象

router.post('/login.do', userCtrl.userLogin)
router.get('/student', userCtrl.findAll)
// 对外暴露模块
module.exports = router
  • controller/userCtrl.js
const userDao = require('../dao/userDao')

module.exports = {
    userLogin(req, resp) {
        console.log(`1.控制接收前端请求数据处理`)
        let { user, pwd } = req.body
        let us = [user, pwd]
        userDao.do("select * from user where username=? and password = ?", us, function (err, data) {
            console.log(`5.controller层处理数据库返回数据函数`)
            console.log(data)
            console.log(err)
        })
        console.log(`6.查询中,主线继续执行`)
    }
}
  • dao/userDao.js
const myPool = require("../config/mysqlPool")

module.exports = {
    do(sql, arr, dos) { //dos是回调函数
        console.log(`2.控制器调用Dao层函数像数据库获取数据`)
        myPool.connect(sql, arr, function (err, data) {
            console.log(`4.Dao层处理数据库返回数据函数`)
            dos(err, data)
        })
    },
}
  • config/mysqlPool.js
const mysql = require("mysql")
const poolCig = { host: "localhost", port: "3306", user: "root", password: "123456", database: 'Node' }
// 数据库
const dbPool = {
    pool: {},
    create() {
        this.pool = mysql.createPool(poolCig) // 创建数据库连接池
    },
    connect(sql, arr, fun) {
        console.log(`3.Dao对数据连接,发送sql语句进行查询`)
        this.pool.getConnection(function (err, connection) {
            connection.query(sql, arr, fun)
            connection.release() //连接清空
        })
    }
}
dbPool.create()
module.exports = dbPool

前台

<html>
<head>
    <meta charset="UTF-8">
    <title>title>
    <style type="text/css">
    style>
head>

<body>
    <form action="/login.do" method="POST">
        用户名: <input name="user" type="text" autocomplete="off" />
        密 码: <input name="pwd" type="password" autocomplete="off">
        <button>提交button>
    form>
body>
html>

– 运行结果
(异步任务在主线程执行完之后再执行)
Node Express 搭建MVC三层架构Demo_第3张图片

你可能感兴趣的:(Node,javascript,nodejs)