express使用简介

本文介绍了使用Express框架搭建全栈Web应用的步骤,包括安装脚手架、创建项目、配置环境、启动服务。讲解了Express的路由处理、错误处理中间件和视图引擎设置。还涉及数据库操作,如使用MySQL和防止XSS攻击,并引入了session管理和日志记录。最后提到了线上部署,包括使用pm2进行进程管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 框架搭建

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或内存信息

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值