阅读更多系列文章请访问我的,示例代码请访问。
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 } ]复制代码