Node.js + Express + MySQL 搭建项目框架

19,984

背景

本文主要是展示使用 Express 和 MySQL 来搭建项目框架的步骤,展示了如何搭建项目并进行基本操作。

Express

创建项目

Express 是基于 Node.js 平台,快速、开放、极简的 Web 开发框架。

全局安装 express-generator

express-generator 是 Express 应用程序生成器工具,我们可以使用它来快速创建应用程序框架。

npm install -g express-generator

创建项目

express expressFrame (expressFrame 是项目名)

项目的目录结构

bin/www 是启动入口文件,在里面可以设置端口号等

下载依赖

创建好项目之后,里面有包含基本的项目文件,也有相关依赖

npm install

启动项目

npm start

启动命令还可以是:

nodo ./bin/www

安装 nodemon

可以安装 nodemon 来监控 node.js 源代码的任何变化和自动重启你的服务器

全局安装 nodemon:

npm install -g nodemon

启动项目

nodemon bin/www

这就启动成功啦

浏览器打开 http://localhost:3000 就能看到页面啦

添加打印日志文件

这里采用的是 winston 日志

具体用法可看文档:www.npmjs.com/package/win…

安装 winston

npm i winston

配置打印日志格式

在项目的根目录添加一个配置打印日志格式的文件 logger.js (此文件在 github 上)

修改 app.js 的配置

修改项目默认的变量名

const logger = require('morgan'); 改成:

const morgan = require('morgan')

相应的也要把 app.use(logger('dev')); 改成:

app.use(morgan('dev'));

引入 logger.js 文件

const logger = require('./logger')

修改错误处理

将错误打印到日志上

测试日志是否打印成功

请求一个不存在的路由,如: http://localhost:3000/hello

打开日志文件,看到这条错误被打印出来就成功啦

MySQL

启动数据库

这里使用的方法是用 Docker 安装 MySQL

这里是安装的教程:www.runoob.com/docker/dock…

安装数据库管理工具

Sequel Pro macOS 用户安装

navicat windows 用户安装

这里选择用 Sequel Pro 启动好数据之后,就在 Sequel Pro 连接数据库,密码是启动数据库时自己设置的密码

创建数据库

使用数据库管理工具新建数据库 database 名称为: expressFrame

进入 expressFrame 库,新建用户信息表为 user ,默认有 id 字段,需要再添加以下必要字段:

Field:id

Field:name Type:VARCHAR LENGTH:255 Comment:姓名

Field:phone Type:VARCHAR LENGTH:255 Comment:手机号

使用 Knex 增删改查数据库

Knex.js是为 Postgres,MSSQL,MySQL,MariaDB,SQLite3,Oracle 和 Amazon Redshift 设计的 SQL 查询构建器,其设计灵活,便于携带并且使用起来非常有趣。Knex 的主要目标环境是 Node.js,您需要安装该 knex 库,然后安装适当的数据库库:pg 适用于 PostgreSQL 和 Amazon Redshift,mysql 适用于 MySQL 或 MariaDB,sqlite3 适用于 SQLite3 或 mysql 适用于 MSSQL。

下载相关依赖

npm install -save knex mysql

添加配置信息

在项目根目录下,新建配置信息 config.js,之后的配置信息涉及到数据库和密码,不上传到 Github 等托管平台,所以需要单独设置,使用 .gitignore 避免上传。之后敏感的配置信息,都将在此配置。host 地址为数据库的服务地址,本地为 127.0.0.1 。

const configs = {
  mysql: {
    host: '127.0.0.1',
    port: '3306',
    user: 'root',
    password: '123456',  // 自己设置的密码
    database: 'expressFrame' // 数据库的名字
  },
  // 打印错误
  log: {
    error (message) {
      console.log('[knex error]', message)
    }
  }
}

module.exports = configs
新建 .gitignore

在项目根目录下,新建 .gitignore 避免上传 config.js 、log、 node_modules 等不需要被上传到 Github 的文件。

.DS_Store
.idea
npm-debug.log
yarn-error.log
node_modules
log
# config.js 这个文件我这里就不加进来了,我把它上传到 github
数据库配置

新建 models/knex.js, 初始化配置 knex

// 引用配置文件
const configs = require('../config');
// 把配置文件中的信息,设置在初始化配置中
module.exports = require('knex')({
  client: 'mysql',
  connection: {
    host: configs.mysql.host,
    port: configs.mysql.port,
    user: configs.mysql.user,
    password: configs.mysql.password,
    database: configs.mysql.database
  },
  // 打印错误
  log: {
    error (message) {
      console.log('[knex error]', message)
    }
  }
})
knex 增删改查

在 models 下新建文件 base.js

const knex = require('../models/knex');

class Base{
  constructor(props){
    this.table = props;
  }

  // 查找
  all (){
    return knex(this.table).select();
  }

  // 新增
  insert (params){
    return knex(this.table).insert(params);
  }

  // 更改
  update (id, params){
    return knex(this.table).where('id', '=', id).update(params);
  }

  // 删除
  delete (id){
    return knex(this.table).where('id', '=', id).del();
  }

}

module.exports = Base;
新建用户模型

在 models 下新建文件 user.js

const Base = require('./base');

class User extends Base {
  // 定义参数默认值为 user 表
  constructor(props = 'user'){
    super(props);
  }
}

module.exports = new User();
新建用户控制器

在根目录新建控制器文件夹 controllers,在 controllers 新建 user.js,并设置 showUser 方法

// 引用用户模版数据
const User = require('../models/user.js');

const userController = {
  // showUser 获取用户数据并返回到页面
  showUser: async function(req,res,next){
    try{
      let userData = await User.all()
      res.json({
        code: 200,
        message: "操作成功",
        data: userData
      })
    }catch(e){
      res.json({ code: 0, message: "操作失败", data: e })
    }
  },
}

module.exports = userController;
添加获取用户接口

修改路由 routes/index.js,添加获取用户信息的接口

const userController = require('../controllers/user');

// 获取用户信息
router.get('/get_user', userController.showUser);

测试接口

访问一下 http://localhost:3000/get_user

查看接口返回的数据

这就大功告成啦~

github地址:github.com/ysm27/expre…

走过路过点个赞呗~