express使用简介

2023-11-18

  • 框架搭建

1、安装脚手架:

npm install -g express-generator

2、创建项目:

       express myapp

       查看项目目录,可以知道启动文件www作用是提供http服务

       express是一个全栈环境,所以有views、public

3、安装nodemon自动重启工具、cross-env设置环境变量脚本

       npm i nodemon cross-env –save-dev

4、修改package.json,添加命令行,设置环境变量参数,监听www文件的变化

   "dev": "cross-env NODE_ENV=dev  nodemon ./bin/www"

5、启动:

npm run dev

  • 查看入口文件,处理路由get、post请求
  1. 查看app.js作用


 

var createError = require('http-errors'); //错误处理

var express = require('express');

var path = require('path'); 

var cookieParser = require('cookie-parser'); //解析cookie 可以通过req.cookie访问cookie

var logger = require('morgan'); //记录accesslog日志功能



var indexRouter = require('./routes/index'); //引用路由

var usersRouter = require('./routes/users'); 



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()); //处理content-type为application/json格式的 请求数据 可以通过req.body等等

app.use(express.urlencoded({ extended: false })); //获取其他请求格式的数据

app.use(cookieParser());

// app.use(express.static(path.join(__dirname, 'public'))); //暂时不使用静态文件夹



app.use('/', indexRouter);   //注册路由

app.use('/users', usersRouter); // /user为父路由



// catch 404 and forward to error handler

app.use(function(req, res, next) { // 未请求到路由

  next(createError(404));

});



// error handler

app.use(function(err, req, res, next) { //程序错误

  // set locals, only providing error in development

  res.locals.message = err.message;

  res.locals.error = req.app.get('env') === 'dev' ? err : {};



  // render the error page

  res.status(err.status || 500);

  res.render('error');

});



module.exports = app;



 

  1. 路由处理,引用路由,注册路由

3、路由编写 理解中间件

var express = require('express')

var router = express.Router()



router.get('/login', function(req,res,next){

    // res.render('index', {title: 'mylogin'}); //返回页面内容

    res.json({

        code: 0,

        msg: '登录成功',

        data: {

            name: 'qingcai1',



        }

    })

});

router.post('/register', function(req,res,next){

    const { username, password } = req.body //获取前端传参

    res.json({

        code: 0,

        msg: '注册成功',

        data: {

            username,

            password

            

        }

    })

});

module.exports = router

app.请求方法,可以同时包含多个处理方法

 

  • 开发接口
  1. 安装mysql xss 插件

npm i mysql xss –save

  1. 封装mysql请求方法
const env = process.env.NODED_ENV



//配置

let MYSQL_CONF

let REDIS_CONF

if( env === 'dev'){

    MYSQL_CONF = {

        host: '114.215.***,***',

        user: 'root',

        password: '***',

        port: '3306',

        database: '****'

    }

}



module.exports = {

    exec,

    escape: mysql.escape

}







const mysql = require('mysql')

const { MYSQL_CONF } = require('../conf/db')



//创建连接对象

const conn = mysql.createConnection(MYSQL_CONF)



//链接

conn.connect()



//执行sql 语句

function exec(sql){

    return new Promise((resolve,reject)=>{

        conn.query(sql, (err, res)=>{

            if(err){

                reject(err)

                return

            }

            resolve(res)



        })

    })

}

module.exports = {

    exec,

    escape: mysql.escape

}


 

 

  1. 配置sql请求控制件,编写sql请求

const xss = require('xss') //防止xss攻击

const { exec } = require('../db/mysql') 



const login = (username,password)=>{

    let sql = 'select * from user where 1 = 1'

    if(!username){

        return "请输入用户名"

    }

    if(!password){

        return "请输入密码"

    }

    sql += "and username = '"+ username +"' and userpwd = '"+ password +"'";

    return exec(sql)

}

 

4、返回值统一处理

class BaseModel {

    constructor(data, msg){

        if(typeof data === 'string'){

            this.msg = data

            data = null

            msg = null

        }

        if(data){

            this.data = data

        }

        if(msg){

            this.msg = msg

        }

    }

}

class SuccessModel extends BaseModel{

    constructor(data,msg){

        super(data,msg)

        this.code = 0

    }

}



class ErrorModel extends BaseModel{

    constructor(data,msg){

        super(data,msg)

        this.code = -1

    }

}

class ErrorModel extends BaseModel{

    constructor(data,msg){

        super(data,msg)

        this.errno = -1

    }

}



module.exports = {

    SuccessModel,

    ErrorModel,

}
  1. 数据库数据关键部分加密,新建utils crpy文件

const crypto = require('crypto') //加密库



//秘钥

const SECERT_KEY = 'gujianxiang'



//md5 加密

function md5(content) {

    let md5 = crypto.createHash('md5')

    return md5.update(content).digest('hex')

}



// 加密函数

function genPassword(pwd) {

    const str = `password=${pwd}&key=${SECERT_KEY}`

    return md5(str)

}

module.exports = {

    genPassword

}

 

  1. 登录准备工作 安装 、引用、注册session

cnpm I express-session


app.use(session({ 

  secret: 'wind', //设置秘钥

  cookie: {   //cookie没目录

    // path: '/', //默认配置 根目录 设置前端可以访问目录

    // httpOnly: true, //默认配置 前端js无法访问

    maxAge: 24 * 60 * 60 * 1000 //过期时间

  }

}))
  1. 安装redis

npm i redis connect-redis –save

linux win10的启动等等,都是学问啊

  1. 中间件

 

四、日志

 

 

 

 

 

  • 线上环境
  1. 安装pm2

npm i pm2 -g

添加 "prd""cross-env NODE_ENV=prd pm2 start  nodemon ./bin/www"

  1. pm2常用命令

pm2 start ….

Pm2 list进程列表

Pm2 restart ..重启             

Pm2 delete … 删除

Pm2 stop … 停止

Pm2 info 进程信息

Pm2 log 进程日志

Pm2 monit cpu或内存信息

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

express使用简介 的相关文章

  • YOLO v7

    文章目录 YOLO v7 一 结构更新 VoVNet CSPVoVNet ELAN RepVGG auxiliary heads SimOTA 二 Loss更新 coarse to find auxiliary loss 三 Others
  • kafka常用命令

    启动zookeeper bin zookeeper server start sh config zookeeper properties 启动kafka bin kafka server start sh config server pr
  • QT时间日期定时器类(5.时间获取转换与排序)【QT基础入门 Demo篇】

    一 QT获取当前时间的方法 二 QString和QDateTime之间的相互转换 三 日期排序 获取时间最值 四 QT延时操作 一 QT获取当前时间的方法 1 使用QDateTime类
  • 解决vscode各种异常格式化编译器配置

    在vscode中创建vue文件时 若编辑代码时会出现间隔一段时间后自动的格式化内容 会很烦 经反复改查后无果 后来 对编辑器进行全面配置 首先原setting json文件中的代码是这样的 files autoSave afterDelay
  • 深度学习踩坑系列之十 创建&克隆&激活虚拟环境

    创建虚拟环境 conda create n your env name python 3 6 2 pip numpy matplotlib pandas sortedcontainers conda克隆虚拟环境 conda create n
  • 蓝桥杯 辗转相除法---求最大公约数

    1 例子 例如 求 319 377 319 377 0 余319 319 377 377 319 377 319 1 余58 377 319 319 58 319 58 5 余29 319 58 58 29 58 29 2 余0 58 29
  • Windows Server 2019 会话远程桌面-快速部署(RemoteApp)

    目录 一 实验要求 二 搭建远程桌面服务RDS 三 需要软件安装 1 安装Firefox 浏览器 2 安装一款视频播放器 3 安装WPS office 套件 四 发布应用 1 发布Firefox 浏览器 2 发布一款视频播放器 3 发布WP
  • pyodbc操作Access数据库

    现在各种各样的数据库层出不穷 什么MySQL PostgreSQL MongoDB这些都是比较火的 还有一些稍微小众一点的数据库就更多了 相比之下 微软Office套件里面附带的Access数据库究落寞了很多 不过好歹Access数据库还是
  • 【图像处理】图像二值化----otsu(最大类间方差法、大津算法)

    转载 https blog csdn net abcjennifer article details 6671288 最大类间方差法是由日本学者大津于1979年提出的 是一种自适应的阈值确定的方法 又叫大津法 简称OTSU 它是按图像的灰度
  • Bicubic Interpolation (双三次插值)

    在Wikipedia http en wikipedia org wiki Bicubic interpolation 上找到了bicubic的描述 不过它只给出了知道导数情况下的公式 后来在CSDN上找到了C语言的算法描述 http to
  • k8s-node节点未找到flannel网络

    k8s node节点的flannel的IP地址不正确 问题描述 问题分析 1 检查node节点的cni和flannel网卡地址 2 检查master节点的flannel服务 如何重置flannel网络 1 删除node节点 master 2
  • unity中Input.Touch详解

    相关的api 1 Touch类 用来记录一个手指触摸在屏幕上的状态与位置的各种相关数据 这其它中只有两个属性是你要注意的 就是Touch fingerId和Touch tapCount Touch fingerId 一个Touch的标识 I
  • Linux常用压缩命令(tar,tgz,gzip,zip,rar)

    Linux常用于压缩和解压tar tgz gzip zip rar 一 tar 1 压缩命令 tar cvf examples tar files dir files dir表示要压缩文件或者目录 说明 c create create a
  • llama.cpp试用

    显存占用是真的低 13B vicuna int4量化 example chat 13B sh 正常问答交流 不到2G的占用 相比之下 vicuna7B原版int8量化 8G显卡下 cuda会OOM 原版不支持int4量化 chatglm6B
  • Android应用底部导航栏(选项卡)实例

    现在很多android的应用都采用底部导航栏的功能 这样可以使得用户在使用过程中随意切换不同的页面 现在我采用TabHost组件来自定义一个底部的导航栏的功能 我们先看下该demo实例的框架图 其中各个类的作用以及资源文件就不详细解释了 还
  • Denoising diffusion implicit models 阅读笔记

    Denoising diffusion probabilistic models DDPMs 从马尔科夫链中采样生成样本 需要迭代多次 速度较慢 Denoising diffusion implicit models DDIMs 的提出是为
  • 其他需要整理

    1 Kinect OpenNI学习笔记之6 获取人体骨架并在Qt中显示 http www cnblogs com tornadomeet archive 2012 10 03 2710737 html
  • 人脸识别产品相关知识整理

    引言 这个文章是我18年初整理的一个基础人脸识别产品知识 人脸识别规范 标准和白皮书 我在工标网站上找到了公安部的 GA T 1093 2013 出入口控制人脸识别系统技术要求 和 GA T 1126 2013 近红外人脸识别设备技术要求
  • 理解Java的IO 流

    按照流的流向来分 可以分为输入流和输出流 输入流 只能从中读取数据 而不能向其中写数据 输出流 只能向其写出数据 而不能从中读取数据 对于上面的左图来说 数据从内存到硬盘 通常我们称为输出流 也就是说 这里的输出 都是从程序运行所在的内存角
  • hive中如何取到每个顾客最新交易

    hive e use db select t advertId t exposureNum from select advertId exposureNum ROW NUMBER OVER PARTITION BY advertId ORD

随机推荐

  • 《计算机网络》——第四章知识点

    第四章思维导图如下 网络层向上只提供灵活的 无连接的 尽最大努力交付的数据报服务 主要任务是把分组 IP数据报 从通过路由选择与转发从源端传到目的端 为分组交换网上的不同主机提供通信服务 互联网可以由多种异构网络互连组成 IP数据包格式 I
  • 【突变检验方法二】MATLAB实现贝叶斯突变检测

    MATLAB实现贝叶斯突变检测 1 贝叶斯突变检测 2 原理 3 MATLAB相关代码 3 1 调用函数 3 2 案例 参考 另 其它语言实现贝叶斯突变检测 1 贝叶斯突变检测 贝叶斯突变检测属于概率突变检测方法 其特点是能给出突变点的概率
  • json数据如何存入到cookie中,如何获取

    1 引入相对应的cookie js插件如下 例如 button click function var username input name username val var password input name password val
  • scrapy爬虫爬取多网页内容

    摘要 此案例是爬取目标网站 https tipdm com 的新闻中心板块的公司新闻中所有新闻的标题 发布时间 访问量和新闻的文本内容 1 创建scrapy项目 我使用的是 Anaconda prompt 我们使用如下命令创建scrapy项
  • 视线估计、凝视目标估计相关评价指标

    1 TP TN FP FN qquad T F表示待分类目标的GT值 qquad P N表示预测到目标的正反例 在目标检测类任务中 qquad TP 表示正确检测到待检测目标
  • vcruntime140_1.dll丢失怎么办?vcruntime140_1.dll丢失最新解决方法

    如果您在使用某些软件或游戏时遇到了 vcruntime140 1 dll丢失 的错误提示 那么您需要采取一些措施来解决这个问题 以下三种解决方案都能解决vcruntime140 1 dll丢失问题 第一种解决方法 直接使用dll修复程序进行
  • C语言 mktime() gmtime()实现——亲测正确性

    前言 写此文章是因为有的嵌入式设备编程时不支持
  • node_modules安装及卸载

    1 安装 npm install 安装tb镜像 npm install g cnpm registry https registry npm taobao org 2 卸载 1 npm install rimraf g 2 rimraf n
  • Vue3 + Element-UI 搭建一个后台管理系统框架模板

    概述 本文将介绍如何基于Vue3和element ui搭建一个后台管理系统框架模板 我们将详细讲解代码流程 并提供详细的说明 技术栈 Vue3 Element ui Axios 前置知识 本文假设读者已经熟悉Vue3和Element ui的
  • Bootstrap插件(六)——警告框(alert.js)

    bootstrap中的alert和原本的alert弹框可不太一样 原来我们熟悉的弹框是在执行某个动作的时候 浏览器和我们弹出来的一个提示框 比如下面这样 而我们这里的警告框是在html内容之间的提示内容 只是他有着醒目的颜色 以此来达到提醒
  • h5标签上实现文字空格

    在vue项目中实现文字之间的空格 div class top p class groupLeader 组 xa0 xa0 xa0 长 span xxx span p p class standingGroupLeader 副组长 span
  • [YOLO专题-23]:YOLO V5 - ultralytics代码解析-网络子结构详解

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 122369993 目录 第1章 网络总
  • [QT编程系列-2]:C++图形用户界面编程,QT框架快速入门培训 - 1- 预备知识

    目录 概述 1 前置条件 1 1 C 1 2 图形界面 1 3 图形程序集成开发环境 1 4 图形程序开发框架 1 5 跨平台特性 1 6 QT快速感知 1 6 1 QT的典型应用 1 6 2 QT的特点 1 6 3 QT跨平台集成开发环境
  • Qt QProcess

    目录 概述 实 现 一 函数接口 二 执行命令 三 管 道 概述 本文介绍 在Linux环境下 使用Qt中的QProcess类执行shell命令并获取输出 头文件 include
  • 区块链数字签名详解

    有一点比较难以理解的答案就是 私钥加密公钥可以解密 公钥加密私钥可以解密 RSA的原理 两个大质数 p q 乘积 n 难以逆向求解 所以pq是对等的 公钥和私钥也是对等的 区块链 从数字货币到信用社会 读书笔记 这张图来自于新生大学的周兵
  • 【Vue项目实战】Vue3动画神操作!教你如何实现PPT一样的动画效果!

    文章目录 前言 一 Animate css是什么 二 安装和使用 1 安装 2 基本用法 3 JavaScript用法 三 动画制作 1 弹入动画 总结 前言 最近写界面的时候 发现一个前端组件很好玩 他就是鼎鼎大名的 Animate cs
  • 海康工业摄像头调用(linux基于python和opencv)

    1 下载官网客户端 其中包含SDK 官方网站 海康机器人 机器视觉 下载中心 安装deb文件 sudo dpkg i deb文件名 2 运行客户端 cd opt MVS bin MVS sh 如果连不上 看看是不是usb3 0的接口 3 调
  • ThinkPHP 日志信息泄露漏洞复现

    ThinkPHP 日志信息泄露漏洞复现 漏洞简介 ThinkPHP在开启DEBUG的情况下会在Runtime目录下生成日志 而且debug很多网站都没有关 ThinkPHP默认安装后 也会在Runtime目录下生成日志 THINKPHP3
  • 基于SSM 和 layui 的增删查改

    开发工具 IDEA 2021 WebStorm 2021 Mysql 8 0 开发环境 JDK 8 TomCat 8 5 81 apache maven 3 6 1 技术点 Spring SpringMVC Mybatis Mysql Ht
  • express使用简介

    框架搭建 1 安装脚手架 npm install g express generator 2 创建项目 express myapp 查看项目目录 可以知道启动文件www作用是提供http服务 express是一个全栈环境 所以有views