翻看了很多教程和文章记录一些基础知识。
一开始看的尚硅谷的教程。介绍Nodejs属性,引入express框架+MongoDB 开发了一个记账本功能。缺点是视频的项目过于简单且没有前后端分离。起着一个了解的作用。
nodejs
nodejs引入属性的方式都是通过require来引入。 module.exports暴露模块。
fs模块为文件模块。
//读取文件
fs.readFile(path[, options], callback)
fs.readFile('./files/1.txt', 'utf8', function (err, dataStr)
//写入文件
fs.writeFile(file,data[, options], callback)
//可以通过__dirname进行路径拼接
__dirname 表示当前文件所处的目录
http模块为服务器模块
// 1. 导入 http 模块
const http = require('http')
// 2. 创建 web 服务器实例
const server = http.createServer()
// 3. 为服务器实例绑定 request 事件,监听客户端的请求
server.on('request', function (req, res) {
console.log('Someone visit our web server.')
})
// 4. 启动服务器
server.listen(8080, function () {
console.log('server running at http://127.0.0.1:8080')
})
npm nvm
包的版本号是以“点分十进制”形式进行定义的,总共有三位数字,例如2.24.0其中每一位数字所代表的的含义如下:
- 第1位数字:大版本
- 第2位数字:功能版本
- 第3位数字: Bug修复版本
nvm ls 查看所有node版本
nvm use 16.16.0 切换到某个node版本
express
npm install -g express-generator
构建完成后通过npm start 启动项目 然后访问 http://localhost:3000
nodemon可以监听代码修改
npm i nodemon
安装后修改package.json
"scripts": {
"start": "nodemon ./bin/www"
},
生成的项目主要修改routes里的路由部分 用于书写接口 app.js用于引入一些路由和文件配置。
数据库选择
对MongoDB(非关系型)和MySQL(关系型)都有所学习。
MongoDB
nodejs对MongoDB比较友好,安装好后直接引用。
//1. 安装 mongoose
//2. 导入 mongoose
const mongoose = require('mongoose');
//设置 strictQuery 为 true,处理禁用警告
mongoose.set('strictQuery', true);
//3. 连接 mongodb 服务 mongodb协议 默认端口号27017 数据库的名称(如果数据库不存在,自动创建)
mongoose.connect('mongodb://127.0.0.1:27017/bilibili');
//4. 设置回调
// 设置连接成功的回调 once 一次 事件回调函数只执行一次
mongoose.connection.once('open', () => {
//5. 创建文档的结构对象
//设置集合中文档的属性以及属性值的类型
let BookSchema = new mongoose.Schema({
name: String,
author: String,
price: Number
});
//6. 创建模型对象 对文档操作的封装对象,mongoose.model(集合名称,结构对象)
let BookModel = mongoose.model('books', BookSchema);
//7. 新增
BookModel.create({
name: '西游记',
author: '吴承恩',
price: 19.9
}, (err, data) => {
//判断是否有错误
if(err) {
console.log(err);
return;
}
//如果没有出错, 则输出插入后的文档对象
console.log(data); //data 插入成功后的文档对象,mongodb自定生成编号和版本号
//8. 关闭数据库连接 (项目运行过程中, 不会添加该代码)
mongoose.disconnect();
});
});
// 设置连接错误的回调
mongoose.connection.on('error', () => {
console.log('连接失败');
});
//设置连接关闭的回调
mongoose.connection.on('close', () => {
console.log('连接关闭');
});
其他的引用方法查询官网文档即可,不过多赘述。
MongoDB Compass可视化工具
MySQL
安装MySQL和navicat。
安装后创建连接即可。
基础查询语句crud.
//增
INSERT INTO table_name (`column1`, column2, ...)
VALUES (value1, value2, ...);
//删
DELETE * FROM table_name
WHERE condition;
//改
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
//查
SELECT column1, column2, ...
FROM table_name
WHERE condition;
//模糊查询 like %
SELECT column1, column2, ...
FROM table_name
WHERE title like %xxx%;
//分页查询 0是从第0条开始 10是查询10条数据
SELECT * FROM table_name
LIMIT 0,10;
常见数据类型 整数类型:BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、 INT、 BIG INT
浮点数类型:FLOAT、DOUBLE、DECIMAL
字符串类型:CHAR、VARCHAR、TINY TEXT、TEXT、MEDIUM TEXT、LONGTEXT、TINY BLOB、BLOB、MEDIUM BLOB、LONG BLOB
日期类型:Date、DateTime、TimeStamp、Time、Year
其他数据类型:BINARY、VARBINARY、ENUM、SET、Geometry、Point、MultiPoint、LineString、MultiLineString、Polygon、GeometryCollection等
ORM 来与数据库进行交互
node常用的Sequelize 和 knex
Sequelize
全局安装Sequelize
npm i -g sequelize-cli
安装对数据库支持的mysql2
npm i sequelize mysql2
初始化项目
sequelize init
- config:文件用于配置数据库连接
- migrations:如果你需要对数据库做新增表、修改字段、删除表等等操作,就需要在这里添加迁移文件了。而不是像以前那样,使用客户端软件来直接操作数据库。
- models:这里面存放的是模型文件,当我们使用
sequelize来执行增删改查时,就需要用这里的模型文件了。每个模型都对应数据库中的一张表。 - seeders,是存放的种子文件。一般会将一些需要添加到数据表的测试数据存在这里。只需要运行一个命令,数据表中就会自动填充进一些用来测试内容的了。
//findAll 查询 SELECT * FROM ...
const users = await User.findAll();
//create 创建
const jane = await User.create({ name: "Jane" });
//findByPk 查询某一条数据
const project = await Project.findByPk(123);
//update 改
await User.update({ lastName: "Doe" }, {
where: {
lastName: null
}
});
// 删除所有名为 "Jane" 的人
await User.destroy({
where: {
firstName: "Jane"
}
});
完整代码结构
//异步获取数据库数据
router.get('/', async function (req, res, next) {
try {
// res.render('index', { title: 'Express' });
//倒序
const condition = {
order: [['id', 'DESC']],
};
const articles = await Article.findAll(condition);
res.json({ status: '0000', message: '返回成功', data: articles });
} catch (error) {
res.status(500).json({ status: '9999', message: '返回失败', error: [error.message] });
}
});