真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

使用express怎么實現(xiàn)項目分層

使用express怎么實現(xiàn)項目分層,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

創(chuàng)新互聯(lián)公司專注于企業(yè)全網(wǎng)營銷推廣、網(wǎng)站重做改版、東豐網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5場景定制、電子商務(wù)商城網(wǎng)站建設(shè)、集團公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為東豐等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

1 四(五)層結(jié)構(gòu)概念

這個就簡單說一下,所謂四層架構(gòu)就是 Model實體層,Dao層(數(shù)據(jù)訪問層也就是從數(shù)據(jù)庫中查數(shù)據(jù)),Service層(業(yè)務(wù)邏輯層,也就是處理好數(shù)據(jù)),Controller層(視圖控制層,在前后端分離的情況下就是寫接口響應(yīng)前端請求)和前端的 view(視圖層),為啥要搞分層咧,說到底就是要解耦合,提高拓展性和維護性,寫代碼的時候,思路清晰一點,后面改代碼的時候也知道要改哪邊。

但是我們這次只是涉及后臺的,視圖層我們就不用管了,只需看前面的就行了。

2 分層

首先看一下項目結(jié)構(gòu)哈

│ app.js
│ package.json
│ README.md
│
├─.idea
│ │ express-project.iml
│ │ misc.xml
│ │ modules.xml
│ │ vcs.xml
│ │ watcherTasks.xml
│ │ workspace.xml
│ │
│ └─inspectionProfiles
├─bin
│  www
│
├─config
│  db.json
│
├─dao
│  BaseDao.js
│  UserDao.js
│
├─models
│  user.js
│
├─public
│ ├─images
│ ├─javascripts
│ └─stylesheets
│   style.css
│
├─routes
│  index.js
│  users.js
│
├─services
│  UserService.js
│
├─utils
│  db-util.js
│
└─views
  error.jade
  index.jade
  layout.jade

按照分層思想,我們新建幾個文件夾哈,首先是 Model層的 models 文件夾,dao 層的 dao 文件夾,service 層的 services 文件夾,controller 層的話就用原來的 routes 文件夾就可以了,為了方便,我加了一個全局配置的 config 文件夾和工具函數(shù) utils 文件夾。具體項目如下,我們從最底層開始來一個一個來分析

2.1 config

這個就放著各種配置文件,例如我的 db.json 里面就放了MongoDB 的端口號,數(shù)據(jù)庫名那些,反正就是各種配置啦

2.2 utils

這個就是有一些創(chuàng)建型的方法或者其他公共方法,像創(chuàng)建數(shù)據(jù)庫連接池的方法我就放在這邊的 db-util 里面了。

2.3 models

實體層,針對 mongodb 來說,一個集合對應(yīng)一個 model,然后都是這樣的形式啦。

const mongoose = require('mongoose');
const { mongoClient } = require('../utils/db-util');

// 創(chuàng)建 user Schema
const user = new mongoose.Schema({
 name: String,
 id: String,
},{versionKey: false});

/*model 的參數(shù)1 導出的模塊名,
參數(shù)2 創(chuàng)建的 Schema,
參數(shù)2 指定數(shù)據(jù)庫中的集合的名字,若不加的,則抹默認取‘第一個參數(shù)s'的集合*/
let User = mongoClient.model('User', user, 'user');

module.exports = User;

2.4 dao

創(chuàng)建完實體層,接下來就是 dao 層了,這邊我封裝了一個 BaseDao,基本的數(shù)據(jù)庫操作都有了,后面我們創(chuàng)建其他 dao 的時候就很舒服啦,直接繼承一下 BaseDao 就好了。例如下面的這個 UserDao:

let BaseDao = require('./BaseDao');
// 導入對應(yīng)的實體
let User = require('../models/user');

class UserDao extends BaseDao{
 constructor() {
 super(User);
 }
 //如果有啥特殊需求的話,自己再重寫方法咯
}

module.exports = UserDao;

這樣就寫好了一個基本的 dao 了,增刪改查這些他都從 BaseDao 中繼承了,

2.5 services

service 層是業(yè)務(wù)邏輯層,這么寫就看你項目的業(yè)務(wù)啦。我下面就簡單些一個查詢所有 user 數(shù)據(jù)的方法啦。

const UserDao = require('../dao/UserDao');

let userDao = new UserDao();

class UserService {
 async getUserList() {
 try {
  // 調(diào)用 dao 層查詢數(shù)據(jù)
  let userList = await userDao.findAll();
  return userList;
 } catch (err) {
  console.log(`getUserList error--> ${error}`);
  return error;
 }
 }
}
module.exports = UserService;

2.6 routes

controller 層,寫接口用,這個寫起來簡單,就拿一下 service 層的數(shù)據(jù)返回就可以啦。

var express = require('express');
var router = express.Router();
const UserService = require('../services/UserService');
let userService = new UserService();

/* GET users listing. */
router.get('/', function(req, res, next) {
 userService.getUserList().then((data)=>{
 res.json({
  code:0,
  msg:'OK',
  data:data
 })
 });
 // res.send('respond with a resource');
});

router.get('/login',(req,res,next)=>{
 res.json({
 code:0,
 msg:'OK',
 data:{result:true}
 })
});
module.exports = router;

然后這邊的話,我有一個想法,就是想著每次多一個路由實例(controller)的時候,就要往 app.js 里面導入并引入,覺得這樣 controller 多了的時候,app.js 里面代碼會很多,所以就想著把模塊導入的代碼移到 routes 文件夾里面的 index.js 里面來,app.js 就引入個 index 就好啦。所以就有了下面 index.js 的代碼。

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
 res.render('index', { title: 'Express' });
});
// user 路由模塊
// 當我在 user 文件里面寫一個 '/login' 的時候,前端訪問就要訪問 '/user/login'
router.use('/user', require('./users'));
module.exports = router;

看完上述內(nèi)容,你們掌握使用express怎么實現(xiàn)項目分層的方法了嗎?如果還想學到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!


網(wǎng)站標題:使用express怎么實現(xiàn)項目分層
分享鏈接:http://weahome.cn/article/jjejes.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部