阅读更多系列文章请访问我的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进程的信息。
- 可以通过process.env环境变量获取开发环境和生产环境系统等参数差异,如开发环境运行在Windows系统上,而生产环境运行在Linux系统,那么就可以使用
process.env.OS === 'Windows_NT'
判断当前所处的是否开发环境。
const mode = process.env.OS === 'Windows_NT' ? 'env' : 'prod'
复制代码
- 也可以通过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 } ]
复制代码