阅读 235

Nodejs教程26:Node.js项目之一:创建目录,环境配置,连接数据库

阅读更多系列文章请访问我的GitHub博客,示例代码请访问这里

Node.js项目介绍

利用学到的知识,实现一个简单但实用的小项目如下:

这是一个商品列表,具有展示商品信息,添加商品,删除商品的功能。

项目的文件夹结构

├── package.json
├── server.js # 服务器代码
├── config # 项目配置文件夹
│ ├── config.dev.js # 开发环境配置
│ ├── config.prod.js # 生产环境配置
│ ├── index.js # 导出当前所处环境及配置 ├── libs # 项目工具文件夹
│ ├── database.js # 连接数据库
│ ├── http.js # 服务器配置
│ ├── router.js # 处理路由
├── router # 项目路由配置文件夹
│ ├── index.js # 连接数据库
│ ├── list.js # 获取商品列表接口配置
│ ├── add.js # 增加商品接口配置
│ ├── del.js # 删除商品接口配置
├── static # 静态资源文件夹
│ ├── index.html # 前端HTML页面
│ ├── js # 前端JavaScript文件夹
│ ├── css # 前端CSS文件夹
│ ├── fonts # 前端字体文件夹
│ ├── upload # 前端上传文件夹

判断当前所处环境

通常项目在开发环境和生产环境要采用不同的,服务器、账号、域名、端口等配置,如果用人工进行切换操作麻烦且容易出错,因此通常使用环境变量进行判断。

首先引入process模块const process=require('process'),该模块提供了当前Node.js进程的信息。

  1. 可以通过process.env环境变量获取开发环境和生产环境系统等参数差异,如开发环境运行在Windows系统上,而生产环境运行在Linux系统,那么就可以使用process.env.OS === 'Windows_NT'判断当前所处的是否开发环境。
const mode = process.env.OS === 'Windows_NT' ? 'env' : 'prod'
复制代码
  1. 也可以通过package.json中配置的启动命令判断处于开发还是生产环境,如开发环境命令npm start --dev和生产环境命令npm run build --build
const mode = process.argv[2] === '--dev' ? 'env' : 'prod'
复制代码

初始化开发和生产环境配置

在/config/index.js中,判断所处的环境,并将相应环境的标识和参数作为模块导出。开发过程中,可以直接引用相应的配置使用。

示例代码:/lesson26/config/index.js

const process = require('process')

// 可以通过开发环境和生产环境系统等参数差异,判断处于哪个环境。
// const mode = process.env.OS === 'Windows_NT' ? 'env' : 'prod'

// 也可以通过package.json中配置的启动命令判断处于开发还是生产环境。
const mode = process.argv[2] === '--dev' ? 'env' : 'prod'

module.exports = {
  mode, // 当前所处环境
  ...(mode === 'env' ? require('./config.dev') : require('./config.prod'))  // 当前环境的配置
}
复制代码

以开发环境为例,需要使用的配置为服务器域名、端口号、账号、密码、数据库名,以及HTTP端口、静态文件绝对路径、上传文件保存绝对路径,如下:

示例代码:/lesson26/config/config.dev.js

module.exports = {
  // 数据库配置
  DB_HOST: 'localhost',
  DB_PORT: 3306,
  DB_USER: 'root',
  DB_PASS: '',
  DB_NAME: 'test',

  // HTTP端口
  HTTP_PORT: 8080,
  // 静态文件绝对路径
  HTTP_ROOT: path.resolve(__dirname, '../static/'),
  // 上传文件保存绝对路径
  HTTP_UPLOAD: path.resolve(__dirname, '../static/upload')
}
复制代码

连接数据库

在lib文件夹下,创建database.js,用于连接数据库。

示例代码:/lesson26/lib/database.js 示例数据库:

// 引入mysql和co-mysql,用于连接数据库
const mysql = require('mysql')
const coMysql = require('co-mysql')

// 引入数据库配置
const {
  DB_HOST,
  DB_PORT,
  DB_USER,
  DB_PASS,
  DB_NAME
} = require('../config')

// 1. 创建服务器连接池
const pool = mysql.createPool({
  host: DB_HOST,
  port: DB_PORT,
  user: DB_USER,
  password: DB_PASS,
  database: DB_NAME
})

// 2. 使用co-mysql包装连接池,将连接转换为Async/Await异步方式
const connection = coMysql(pool)

// 3. 作为模块导出使用
module.exports = connection
复制代码

创建数据库连接后,可以在server.js中,创建一个数据库连接,并查看item_table表的数据。

const connection = require('./lib/database')

;(async () => {
  // 查询item_table表中的数据
  const response = await connection.query(`SELECT * FROM item_table`)
  console.log(response)
})()
复制代码

若正常连接,即可打印数据如下:

[ RowDataPacket { ID: 1, title: '运动服', price: 299, count: 998 } ]ice: 199, count: 999 },
  RowDataPacket { ID: 2, title: '运动裤', price: 299, count: 998 } ]
复制代码
关注下面的标签,发现更多相似文章
评论