express入门学习

241 阅读4分钟

express安装运行

1、安装

npm install -g express-generator 全局安装。

express-generator是一个node的自动化创建项目工具,类似于vue-cli.

express是一个库,是node.js语法的一个类库,而express-generator是项目生成器.

通过express --version来检查当前版本号,若能显示出来,说明安装成功

image.png

2、创建项目

express 项目名,就会在当前文件夹下生成一个项目文件夹

image.png

其中app.js是项目入口文件;

package.json是模块依赖等配置信息;

bin文件夹里面的www.js放一些全局配置项以及命令行配置等。

public 文件夹是用来存放项目静态文件目录如js,css以及图片;

routes文件夹是用来存放路由监听的代码相关文件;

views文件夹用来存放模板文件。

3、启动项目

cd 项目名     进入项目目录

npm install   安装项目依赖

npm start     运行项目

 运行成功后再浏览器中输入localhost:3000就可以看到运行效果;

4、express中处理session 和 session 连接 redis

安装 express-sessionconnect-redis 插件

npm i express-session --save

npm i redis connect-redis --save

app.js 中进行配置:

var session = require('express-session')
var RedisStore = require('connect-redis')(session)

// express 中使用session
const redisClient = require('./db/redis')
const sessionStore = new RedisStore({
   client: redisClient
})

app.use(session({
   secret: 'WJiol#23123_', // 密钥
   cookie: {
       // path: '/', // 默认配置
       // httpOnly: true, // 默认配置
       maxAge: 24 * 60 * 60 * 1000
   },
   store: sessionStore
}))

5、express中使用mysql

1、安装mysql

npm install mysql

2、mysql 链接 demo

const mysql = require('mysql')

//创建链接对象
const con = mysql.createConnection({
    host: 'localhost',  // 地址
    user: 'root',       // 用户名
    password: 'xxxx',   // 密码
    port: '3306',       // 端口
    database: 'blog'    // 数据库
})

// 开始链接
con.connect()

// 执行 sql 语句
const sql = 'select * from users';
con.query(sql, (err, result) => {
    if (err) {
        console.log('err:', err)
        return
    }
    console.log('result:', result)
})

// 关闭链接
con.end()

3、项目中使用mysql

首先安装mysql,新建文件夹 config 里面 创建 db.js 文件;根据当前环境配置不同的数据库:

const env = process.env.NODE_ENV  // 环境参数

// 配置
let MYSQL_CONF

if (env === 'dev') {
    // mysql
    MYSQL_CONF = {
        host: 'localhost',
        user: 'root',
        password: 'admin',
        port: '3306',
        database: 'blog'
    }
}

if (env === 'production') {
    // mysql
    MYSQL_CONF = {
        host: 'localhost',
        user: 'root',
        password: 'admin',
        port: '3306',
        database: 'blog'
    }
}

module.exports = {
    MYSQL_CONF
}

创建db文件夹,创建mysql.js用于连接数据库,执行sql语句:

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

// 创建链接对象
const con = mysql.createConnection(MYSQL_CONF)

// 开始链接
con.connect()

// 统一执行 sql 的函数
function exec(sql) {
    const promise = new Promise((resolve, reject) => {
        con.query(sql, (err, result) => {
            if (err) {
                reject(err)
                return
            }
            resolve(result)
        })
    })
    return promise
}

module.exports = {
    exec,
    escape: mysql.escape
}

写业务的 sql 语句:

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

const getList = (author, keyword) => {
    let sql = `select * from blogs where 1=1 `
    if (author) {
        sql += `and author='${author}' `
    }
    if (keyword) {
        sql += `and title like '%${keyword}%' `
    }
    sql += `order by createtime desc;`

    // 返回 promise
    return exec(sql)
}

module.exports = {
    getList
}

router/blog.js 中根据路由进行请求并返回数据:

var express = require('express');
var router = express.Router();
const {
    getList
} = require('../controller/blog')

router.get('/list', (req, res, next) => {
    const author = 'lisa';
    const keyword = '';

    const result = getList(author, keyword)
    return result.then(listData => {
        res.json(
            data: listData,
            status: 200
        )
    })
});

module.exports = router;

项目插件

nodemon

nodemon 是一种工具,可在检测到目录中的文件更改时通过自动重新启动节点应用程序来帮助开发基于 node.js 的应用程序。

$ npm i -g nodemon

注意:本地安装需要在 package.json 文件的 script 脚本中指定要需要执行的命令

{
  "script": {
    "dev": "nodemon app.js"
  }
}

nodemon 一般只在开发时使用,它最大的长处在于 watch 功能,一旦文件发生变化,就自动重启进程。

👩想了解更多,请移步:nodemon详解

cross-env

是什么?

运行跨平台设置和使用环境变量的脚本

出现原因?

windows不支持NODE_ENV=development的设置方式。

解决

cross-env使得您可以使用单个命令,而不必担心为平台正确设置或使用环境变量。 只要在POSIX系统上运行就可以设置好,而cross-env将会正确地设置它。

说人话: 这个迷你的包(cross-env)能够提供一个设置环境变量的scripts,让你能够以unix方式设置环境变量,然后在windows上也能兼容运行。

安装

npm install --save-dev cross-env

使用
{
  "scripts": {
    "build": "cross-env NODE_ENV=production webpack --config build/webpack.config.js"
  }
}

NODE_ENV环境变量将由cross-env设置

打印process.env.NODE_ENV === 'production

app.js 文件解析

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan'); // 写日志

// var indexRouter = require('./routes/index');
// var usersRouter = require('./routes/users');
var userBolgRouter = require('./routes/user');

var app = express(); // 项目一运行,本次 http 实例

// view engine setup 视图引擎设置
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(logger('dev'));
app.use(express.json());  // 用于处理 post 的数据为 json 的格式
app.use(express.urlencoded({ extended: false })); // post 数据兼容其他的格式
app.use(cookieParser()); // 解析cookie
app.use(express.static(path.join(__dirname, 'public'))); // public文件夹中文件

// 注册路由
// app.use('/', indexRouter);
// app.use('/users', usersRouter);
app.use('/user', userBolgRouter)

// 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') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

user.js 文件

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

router.get('/login', (req, res, next) => {
    const {username, password} = req.body
    res.send({
        status: 200,
        data: {
            name: 'Lisa',
            age: 30
        },
        msg: '请求成功'
    })
})

module.exports = router;

express-redisconnect-redis 插件