【小慕读书】—— 后台管理系统学习:后端框架搭建

摘要:
前言:最近在学习Vue+ElementUI+Node.js小慕读书中后台管理系统开发课程,这里对学习过程作个笔记,方便自己和大家翻阅。

前言:最近在学习Vue+Element UI+Node.js小慕读书中后台管理系统开发课程,这里对学习过程作个笔记,方便自己和大家翻阅。


一、Node 简介

  • Node 是一个基于 V8 引擎的 Javascript 运行环境,它使得 Javascript 可以运行在服务端,直接与操作系统进行交互,与文件控制、网络交互、进程控制等
  • 与Chrome的区别:Chrome 浏览器同样是集成了 V8 引擎的 Javascript 运行环境,与 Node 不同的是他们向 Javascript 注入的内容不同,Chrome 向 Javascript 注入了 window 对象,Node 注入的是 global,这使得两者应用场景完全不同,Chrome 的 Javascript 所有指令都需要通过 Chrome 浏览器作为中介实现

二、Express 简介

  • express 是一个轻量级的 Node Web 服务端框架,同样是一个人气超高的项目,它可以帮助我们快速搭建基于 Node 的 Web 应用

三、项目初始化

创建项目

mkdir admin-imooc-node
cd admin-imooc-node
npm init -y

安装依赖  

npm i -S express

创建 app.js  

const express = require('express')

// 创建 express 应用
const app = express()

// 监听 / 路径的 get 请求
app.get('/', function(req, res) {
  res.send('hello node')
})

// 使 express 监听 5000 端口号发起的 http 请求
const server = app.listen(5000, function() {
  const { address, port } = server.address()
  console.log('Http Server is running on http://%s:%s', address, port)
})

【小慕读书】—— 后台管理系统学习:后端框架搭建第1张  

【小慕读书】—— 后台管理系统学习:后端框架搭建第2张

四、Express 三大基础概念

中间件

中间件是一个函数,在请求和响应周期中被顺序调用

1.next()一定要调用,否则中间件是不会继续向下执行的

2.中间件一定要在请求发起之前执行,否则中间件就执行不到了

// 前置中间件:跨域、日志等操作
function myLogger(req, res, next){
    console.log('myLogger')
    next()         
}

app.use(myLogger)  //中间件需要在响应结束前被调用

/**********************************************************/

// 监听 / 路径的 get 请求
app.get('/', function(req, res) {
  res.send('hello node')
})

【小慕读书】—— 后台管理系统学习:后端框架搭建第3张

路由

应用如何响应请求的一种规则

1.响应 / 路径的 get 请求:

app.get('/', function(req, res) {
  res.send('hello node')
})

2.响应 / 路径的 post 请求: 

app.post('/', function(req, res) {
  res.send('hello node')
})

规则主要分两部分:

  • 请求方法:get、post......
  • 请求的路径:/、/user、/.*fly$/......

异常处理

通过自定义异常处理中间件处理请求中产生的异常  

// 监听 / 路径的 get 请求
app.get('/', function(req, res) {
    //请求响应res已经被响应到,当响应结束,不会执行中间间
    throw new Error('something has error...')
})

/***********************************************************?

// 后置中间件:异常处理
// 后置原因: 前面的throw new Error会寻找后面的errorHandler,倒置则找不到
function errorHandler(err, req, res, next){
    console.log(err)
    res.status(500).json({
        error: -1,
        msg: err.toString()
    })
}

app.use(errorHandler)

使用时需要注意两点:

  • 第一,参数一个不能少,否则会视为普通的中间件
  • 第二,中间件需要在请求之后引用

【小慕读书】—— 后台管理系统学习:后端框架搭建第4张  

五、项目框架搭建

路由

安装 boom 依赖: (最大的好处:快速生成异常信息)

npm i -S boom

创建 router 文件夹,创建 router/index.js:(用来处理全局的异常)  

const express = require('express')
const boom = require('boom')
const userRouter = require('./user')
const {
  CODE_ERROR
} = require('../utils/constant')

// 注册路由
const router = express.Router()

router.get('/', function(req, res) {
  res.send('欢迎学习小慕读书管理后台')
})

// 通过 userRouter 来处理 /user 路由,对路由处理进行解耦
router.use('/user', userRouter)

/**
 * 集中处理404请求的中间件
 * 注意:该中间件必须放在正常处理流程之后
 * 否则,会拦截正常请求
 */
router.use((req, res, next) => {
  next(boom.notFound('接口不存在'))
})

/**
 * 自定义路由异常处理中间件
 * 注意两点:
 * 第一,方法的参数不能减少
 * 第二,方法的必须放在路由最后
 */
router.use((err, req, res, next) => {
  const msg = (err && err.message) || '系统错误'
  const statusCode = (err.output && err.output.statusCode) || 500;
  const errorMsg = (err.output && err.output.payload && err.output.payload.error) || err.message
  res.status(statusCode).json({
    code: CODE_ERROR,
    msg,
    error: statusCode,
    errorMsg
  })
})

module.exports = router

修改app.js

const express = require('express')
const router = require('./router')

// 创建 express 应用
const app = express()

app.use('/', router)

// 监听 / 路径的 get 请求
//app.get('/', function(req, res) {
//    res.send('hello node')
//})

// 使 express 监听 5000 端口号发起的 http 请求
const server = app.listen(5000, function() {
    const { address, port } = server.address()
    console.log('Http Server is running on http://%s:%s', address, port)
})  

创建 router/use.js: 

const express = require('express')

const router = express.Router()

router.get('/info', function(req, res, next) {
  res.json('user info...')
})

module.exports = router

创建 utils/constant:  

module.exports = {
  CODE_ERROR: -1
}

【小慕读书】—— 后台管理系统学习:后端框架搭建第5张

验证 /user/info:(路由嵌套)

【小慕读书】—— 后台管理系统学习:后端框架搭建第6张

验证 /user/login:  

【小慕读书】—— 后台管理系统学习:后端框架搭建第7张


注:项目来自慕课网  

免责声明:文章转载自《【小慕读书】—— 后台管理系统学习:后端框架搭建》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇PHP苹果推送实现(APNS)前后端分离的变化,以及前后端对接需要关注的点下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

服务器上node项目正常启动后不能访问

因为之前node项目启动后连接终端挂了,所以访问不了,进程也占了,端口也占了,为了偷懒,直接换个端口再次启动。 但是这次启动了之后就访问不了了,问题应该是服务器没有对外开放项目的端口。 解决办法有两个: 1、对外开启端口; 2、把占用端口的进程终止,让node项目在已经对外开放的端口运行; 这里我用的第二种方法,比较容易操作 首先把占用8082端口的进程终...

node的安装和配置

一 . 直接安装node 1. http://nodejs.cn/download/ 根据自己的电脑选择适合的安装包 2.安装 , 无脑下一步 , 可以选择安装路径 , 但是一定要记住 . 3.命令行窗口输入 ' node ' 就进入node编辑界面 , 可以输入node命令了. 4.因为现在的node里集成了npm , 所以npm也一并安装好了 , 可...

win10 重新安装桌面工具

win10 重新安装桌面工具 Win10去除了桌面小工具,我已近习惯了放个时钟在桌面,所以又重新找到了下载的地方,如下: 网址: https://gadgetsrevived.com/  点击 download here 下载安装包。 安装好后如下:...

1024程序员节特供:APP弱网络测试利器(QNET)实战

背景介绍QNET:腾讯WeTest的APP弱网络测试专家 背景一 弱网络测试为专项测试之一,最近软件质量标准过程管理中也添加了测试要求: 生命周期 弱网络测试 运营期 必选 试运营期 必选 研发期 / 低维期 / Demo / 要求客户端的核心场景必须有断线重连机制,并在网络抖动、延时、丢包的网络场景下,需要满足: 一、不能出现...

开启这个隐藏功能,让你的Google浏览器下载速度翻倍!

在Google浏览器的实验功能中很早就有了并行下载的功能,只是这个功能一直默认关闭。下面教你如何开启这个实验功能,让你的下载速度有所提升。 在Google浏览器地址栏输入 chrome://flags/ ,然后回车,进入谷歌浏览器实验功能界面。 在搜索框搜索:Parallel downloading,然后将此功能改为:Enabled,开启之后,点击右下角...

[WCF安全系列]服务凭证(Service Credential)与服务身份(Service Identity)

在采用TLS/SSL实现Transport安全的情况下,客户端对服务证书实施认证。但是在默认情况下,这种认证仅仅是确保服务证书的合法性(通过数字签名确保证书确实是由申明的CA颁发)和可信任性(证书或者CA证书存储于相应的可信赖存储区)。而WCF提供服务证书并不限于此,客户端对服务认证的模式应该是这样的:服务端预先知道了服务的身份,在进行服务调用之前,服务端...