Express初始化项目,路由拦截,数据处理,数据库操作

express是一个框架,是在被引入项目中使用的,而非工具。
express-generator是一个工具,此工具的作用是生成express项目。
安装express:npm install express --save
安装express项目生成器:npm install express-generator -g
创建建项目:express project-name
安装依赖:npm install
运行项目:npm run start

nodemon是一种工具,可以自动检测到目录中的文件更改时通过重新启动应用程序来调试基于node.js的应用程序。
安装nodemon:npm install -g nodemon
运行项目:nodemon app.js

app.js文件内容描述:

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');<details>
var logger = require('morgan');
var ejs = require('ejs');

var loginRouter = require('./routes/login');
var userRouter = require('./routes/user');

var app = express();
var http = require('http');
var server = http.createServer(app);

// 模板相关设置
// view engine setup
app.set('views', path.join(__dirname, 'views')); // 设置模版文件夹的路径
//app.set('view engine', 'ejs');//设置视图为ejs引擎
app.engine('html',ejs.__express); //设置视图为html引擎,ejs在页面仍然可用
app.set('view engine', 'html');//设置视图为html引擎,ejs在页面仍然可用

// app.use作用-以下此处都有
// 1.加载中间件,所有中间件都必须在路由之前加载
// 2.加载静态区域
// 3.加载路由
// 4.使用拦截器

// 记录日志的一个中间件
// 可以有各种记录方式:记录到console,记录到文件中,记录到控制台,只记录错误日志,同一天的日志记录到同一个文件中,添加日志id等等
app.use(logger('dev'));

// 解析 application/json 类型的请求体数据
// express.json()函数是Express中的内置中间件函数。它使用body-parser解析带有JSON有效负载的传入请求。
// 解析后可通过req.body获取post请求的json类型参数
app.use(express.json());

// 解析 application/x-www-form-urlencoded 类型的请求体数据
// extended: false:表示使用系统模块querystring来处理,也是官方推荐的
// extended: true:表示使用第三方模块qs来处理,默认值,从功能性来讲,qs比querystring要更强大
// 解析后可通过req.body获取post请求的x-www-form-urlencoded类型参数
app.use(express.urlencoded({ extended: false }));

// cookie管理的一个中间件
// 1.可以设置以及获取cookie
// 2.可以进行cookie加密,需要设置盐和signed:true
// 3.可以设置cookie共享域名
// 学习网址:https://www.cnblogs.com/ywjfx/p/10403903.html
app.use(cookieParser());

// 处理静态请求
// 设置了public文件,public下所有文件都会以静态资源文件形式返回
app.use(express.static(path.join(__dirname, 'public')));

// 放在路由前面,就是路由拦截,可以有多个拦截路由,按顺序执行
// 可以进行鉴权等操作
app.use(function (req, res, next) {
    // 路由中next表示执行匹配的下一项路由或者下一项拦截路由
    // 如果next带参数,比如next(123),就会直接跳转到错误捕获路由,输出错误信息
    next();
});

// 加载路由
app.use('/', loginRouter);
app.use('/user', userRouter);

// 放在路由后面,就是错误路由捕获
// 当所有路由都不匹配的时候,报404
// 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.send({
        code: 400,
        msg: '路由不存在'
    });
});

server.listen(3006);

路由文件user.js

var express = require('express');
var router = express.Router();
var user = require('../controllers/userController')

// 路由拦截
router.get('/getArticleByUserId', user.getArticleByUserId);
 
module.exports = router;

具体处理函数userController.js

var dbConfig = require('../util/dbConfig')

// 获取指定用户的文章列表
const getArticleByUserId = (req, res) => {
    let { user_id } = req.query // 获取get请求路由参数,post使用req.body
    var sql = "select * from article where user_id=?"
    var sqlArr = [user_id]
    var callBack = (err, data) => {
        if (err) {
            console.log('连接出错了')
        } else {
            res.send({
                list: data
            })
        }
    }
    dbConfig.sqlConnect(sql, sqlArr, callBack)
}

module.exports = {
    getArticleByUserId
}

数据库连接处理函数dbConfig.js

const mysql = require('mysql')

// 数据库链接配置
const config = {
    host: 'localhost',
    port: '3306',
    user: 'root',
    password: 'password',
    database: 'test'
}

const pool = {
    // 将创建连接池独立出来,这样不用每次发起数据库连接都重复创建连接池
    pool: mysql.createPool(config),
    // 连接数据库,并执行sql语句
    sqlConnect(sql, sqlArr, callBack) {
        // 链接数据库
        this.pool.getConnection((err, conn) => {
            if (err) {
                console.log('数据库连接失败')
                return
            }
            // 执行数据库操作
            conn.query(sql, sqlArr, callBack)
            // 关闭数据库链接
            conn.release()
        })
    }
}

module.exports = pool
posted @ 2021-11-18 14:58  木-鱼  阅读(538)  评论(0编辑  收藏  举报