Express创建本地服务器的使用

创建express文件夹

初始化项目文档

npm init -y

导入express

npm insatll express

创建项目入口文件app.js

const express = require('express')
const app=express()




app.listen(8081,()=>{
  console.log('端口运行在8081');
})
npm i mysql

 

创建db文件夹添加mysql.js作为sql配置文件

const mysql = require('mysql')
const db = mysql.createPool({
  host: '127.0.0.1',//本机ip地址相当于localhost
  user: 'root',
  password: '123123',
  database: 'new_schema'
})//创建数据库连接实例

module.exports = db//向外暴露作为全局共享

创建路由文件夹,以功能名命名js文件xxx.js

const express=require('express')//导入express
const router=express.Router()//创建路由实例
// 导入handler数据处理回调函数
const {cha}=require('../router_handler/article_handler')
//配置接口路径和请求方式
router.get('/midsen',验证规则,cha)


//向外暴露路由给app.js引入
module.exports = router

创建路由处理回调函数文件夹,以handler命名法,作为对应路由的数据处理文件

//导入数据库连接实例
const db = require('../db/mysql')

exports.cha = (req, res) => {
  res.send('ok')
}

导入nodemon保存自动重启

npm i nodemon --save-dev

启动服务

nodemon app.js

在浏览器中8081端口添加/article/midsen 

下面就可以通过req.query/req.body来拿到从用户端传过来的请求数据,db.query操作数据库通过res.send,把数据传回客户端

  // 定义查询用户信息的sql语句
    const selSql = 'select id,username,user_pic,nickname from ev_users where id=?'
    db.query(selSql, req.auth.id, (err, result) => {
        if (err) return res.cc(err.sqlMessage)
        if (result.length !== 1) return res.cc('获取信息失败')
        res.send({
            status: 0,
            message: '获取信息成功',
            data: result[0]
        })
    })
 res.send({
            status: 0,
            message: '成功',
            data:
        })

 回传数据

定义全局中间件错误处理函数

    // 注册全局中间件用来简化send捕获错误发送提示信息
app.use((req, res, next) => {
        res.cc = function(err, status = 1) {
            res.send({
                status,
                message: err instanceof Error ? err.message : err
            })
        }
        next()
    })

定义数据验证规则,用于验证用户发送数据是否合法

const joi = require('joi')//npm i joi/express-joi --save-dev

const title = joi.string().min(1).max(30).required()
const cate_id = joi.number().integer().min(1).required()
const content = joi.string().min(1).max(255).required()
const cover_img = joi.string().dataUri().required()
const state = joi.string().pattern(/[发布]|[草稿]/).required()

module.exports.add_atricle_schema = {
    body: {
        title,
        cate_id,
        content,
        cover_img,
        state
    }
}

定义全局中间件错误验证处理中间件

 // 定义错误级别全局中间件处理表单验证失败的错误
app.use((err, req, res, next) => {
    // 数据验证失败
    if (err instanceof Joi.ValidationError) return res.cc(err)
        // 
    if (err.name === 'UnauthorizedError') return res.cc("身份认证失败")
        // 数据验证未知错误
    res.cc(err)
})

引入全局处理中间件和验证规则解构

    // 导入表单验证表单数据中间件
const expressJoi = require('@escook/express-joi')
    // 导入验证规则对象
const { reg_login_schema } = require('../schema/user')
    // 注册新用户
    // expressJoi(reg_login_schema)声明局部中间件,对当前请求中携带的数据进行验证
    // 验证通过,数据流转给后面的路由处理函数
    // 验证失败,终止后续代码,抛出Error,进入全局错误中间件进行处理
router.post('/reguser', expressJoi(reg_login_schema), handler.regUser)
    // 登录
router.post('/login', expressJoi(reg_login_schema), handler.loGin)
module.exports = router

添加用户登录token密钥

    // 设置加密字符串
const bcry = require('bcryptjs')
    // 设置用户加密Token
const jsonScr = require('jsonwebtoken')
    // 设置token密钥和生效事件保存在config文件中
const scritKey = require('../Config')



       // 给密码设置成加密字符再重新赋值给user
        user.password = bcry.hashSync(user.password, 10)

token密钥规则

module.exports = {
    // token密钥
    jwtScecret: 'mmws ^^',
    // 有效期
    expiresIn: '10H'
}

获取用户信息时验证密钥身份

 const compare = bcry.compareSync(req.body.oldPwd, result[0].password)
        if (!compare) return res.cc("旧密码不正确")

res.cc是全局res.send中间件

简单示例代码,用于创建简单的express服务器供学习使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值