Express (nodejs) 相关
Express 相关
长乐未央学习视频@东哥
1. 安装 express-generator 脚手架,新建项目
- 执行命令
npm install express express-generator@4 -g
同时安装 express,和 express 脚手架.
npm install express express-generator@4 -g
- 通过 express 脚手架创建 express 项目
express --no-view iike-api
cd iike-api
npm install
npm start (启动项目)
指令解释:
- --no-view 表示 不需要视图模板
- iike-api 表示 express 项目名称
- cd iike-api 进入 iike-api 项目中
express --no-view iike-api
cd iike-api
npm install
npm start
- 访问本地地址
http://localhost:3000/
页面显示
Express Welcome to Express
,表示项目启动成功
2. JSON 格式配置
- 在 express 项目启动成功后,访问本地地址;会发现,是一个 html 格式.
- express 项目一般用来做接口使用,所以我们需要将 html 格式转化为 json 格式.
- 操作如下:
- iike-api\routes\index.js 修改下面代码
router.get("/", function (req, res, next) {
res.render("index", { title: "Express" });
});
// 替换为
router.get("/", function (req, res, next) {
res.json({ message: "Hello Nodejs!" });
});
-
删除 iike-api\public\index.html 文件
-
重启 express 服务
ctrl + c 终止, npm start 重启.
-
刷新页面后,拿到的信息就是 json 格式的了
3. 推荐浏览器处理 JSON 格式的插件
JSON-handle ,
- edge 浏览器可以直接在应用商店中下载
4. 安装 nodemon 解决频繁重启问题
- 下载 nodemon 依赖
npm i nodemon
- 配置 package.json 文件.
将启动脚本
node ./bin/www
改为nodemon ./bin/www
"scripts": {
"start": "nodemon ./bin/www"
},
- 第一次配置,记得重启服务
5. 项目结构 与 代码解析
- routes 文件夹(重要),不同网址对应要不同的程序.后续开发基本都会在 routes 中进行
- app.js 配置跨域 等配置,都会在这里
6. 使用 Docker 运行 mysql (docker 运行不了的话可以使用 小皮面板)
- 安装 docker
docker 官网下载
7. 服务器环境配置软件推荐
宝塔面板
小皮面板
小皮面板 mysql 数据库连接
打开 navicat 或 dbeaver ,数据库可视化管理工具。
以 dbeaver 为例,创建新连接
- 服务器地址: localhost (一般不变)
- 端口: 3306 (一般不变)
- 数据库(名称):express_demo
- 用户名:iike (自定义)
- 密码:666 (自定义)
- 最后点击完成数据库就建好了。
打开小皮面板 ,首页启动 mysql 5… 。
小皮面板 ,点击数据库 ,创建数据库。(输入数据库名称,用户名,密码)
- 这里的数据库名称 就是上面再 dbeaver 中创建的数据库名称。
- 用户名密码 同样是上述中生成的。
回到 dbeaver ,右键创建好的数据库,点击连接。
连接成功后,就可以新建数据表了。
8. Express 创建 mysql 连接
- 在根目录新建一个 database 目录,用来存放 数据库相关操作。
- 新建一个 config.js 文件,用来初始化 mysql 连接操作。
database/config.js 文件内容如下
注意,引入 mysql 之前,记得全局下载一下,npm i mysql
//db.js
const mysql = require("mysql");
//连接数据库
module.exports = {
// 数据库基础配置
config: {
host: "localhost", // 服务器地址
port: 3306, // 端口
user: "iike", // 数据库用户名
password: "666666", // 密码
database: "express_demo", // 数据库名称
},
// 连接数据库,使用 mysql的连接池连接方式
sqlContent: function (sql, sqlArr, callBack) {
var pool = mysql.createPool(this.config);
pool.getConnection((err, connection) => {
console.log("mysql-123");
if (err) {
console.log(err, "连接失败");
return;
}
// 事件驱动回调
connection.query(sql, sqlArr, callBack(err, connection));
// 释放连接
connection.release();
});
},
};
9. routes 文件引入 mysql
在 routes/index.js 文件中配置如下代码
const express = require("express");
const router = express.Router();
var dbCongif = require("../dataBase/config.js");
/* GET home page. */
router.get("/", function (req, res, next) {
// 数据库相关操作
var sql = "SELECT* FROM cate";
var sqlArr = [];
var callBack = (err, conn) => {
if (err) {
console.log(err, "123");
console.log("数据库连接失败");
} else {
conn.query(sql, function (err, result) {
if (err) {
console.log("查询失败");
} else {
res.send({
list: result,
});
}
});
}
};
dbCongif.sqlContent(sql, sqlArr, callBack);
});
module.exports = router;
查询数据表时需注意
!!! 如果控制台报错
Error: ER_NO_SUCH_TABLE: Table 'express_demo.newtable' doesn't exist
,数据表不存在。
- 一定要注意,新建的
数据表是否保存
- 注意,sql 查询时的
数据表名称大小
写问题。数据表保存时,报错
Incorrect table definition; there can be only one auto column and it must be defined
(没有主键)
- 选择约束,新建一个约束(id),设置主键。
配置好查询的 sql 后,访问 localhose:3000
- 在我们配置好 mysql 连接后,就可以查询 数据表中的内容了。
- 访问 localhost:3000 , 就回将数据库中的数据以 json 的格式展示在页面中。
10. api.js 文件注意事项
const indexRouter = require("./routes/index");
const usersRouter = require("./routes/users");
const adminRouter = require("./routes/admin/articles");
app.use("/", indexRouter);
app.use("/users", usersRouter);
app.use("/admin/articles", adminRouter);
// 访问 http://localhost:3000/users 路径,返回 'respond with a resource'
// 访问 http://localhost:3000/users/users 路径,返回 '注意路由路径拼写'
// users.js 文件内容
var express = require("express");
var router = express.Router();
/* GET users listing. */
// '/' 对应 app.js 中的 /users
router.get("/", function (req, res, next) {
res.send("respond with a resource");
});
router.get("/users", function (req, res, next) {
res.send("注意路由路径拼写");
});
module.exports = router;