什么是express?
基于 Node.js 平台,快速、开放、极简的 Web 开发框架。
具体可以参考:
Express中文网
https://blog.csdn.net/qq_45268602/article/details/109150525
如何使用?
可以参考:
https://www.expressjs.com.cn/starter/hello-world.html
- 安装express
npm install express
- 引入express
const express = require('express');
- app实例对象
const app = express();
- app.请求方式
- app.get(请求路径,回调函数)
- app.post(请求路径,回调函数)
- app.all(请求路径,回调函数)
- 监听端口
const port = 3000; // 端口
app.listen(port, () => {}) // app.listen(端口, 回调函数)
express之路由
可以参考:
https://www.expressjs.com.cn/starter/basic-routing.html
https://www.expressjs.com.cn/guide/routing.html
路由 是指确定应用程序如何响应客户端对特定端点的请求,该特定端点是URI(或路径)和特定的HTTP请求方法(GET,POST等)。
而这样的操作需要事先在后台定义好规则,定义出来的规则我们叫做 路由规则。
路由基本语法
- 普通语法
app.HTTP请求类型(请求路径,回调函数)
发送 GET请求:app.get(请求路径,回调函数)
发送 POST请求:app.post(请求路径,回调函数)
发送 任意请求:app.all(请求路径,回调函数)
-
特殊语法
app.use(请求路径,回调函数)- 区别1:use匹配任意类型请求
- 区别2:use非完全匹配(只需要url前面匹配请求路径即可匹配)
路由参数获取
// :id 一般我们称之为 占位符,也叫做路由参数,代表这个是可变
// :type 一般我们称之为 占位符,也叫做路由参数,代表这个是可变
app.get('/news/:id/:type', (req, res) => {
console.log(req.params); // 包含了请求的路由参数
let id = req.params.id;
let type = req.params.type;
res.send('Hello news ' + id + ' type ' + type);
});
利用 Express 托管静态文件
可以参考:
https://www.expressjs.com.cn/starter/static-files.html
express.static()
Express框架中设置了固定语法允许指定目录下的文件被外部访问。
var express = require('express')
var app = express()
app.use('/public', express.static('public'));
模板引擎art-template
模板引擎可以把我们的 js 里面的变量或者数据放置在外部的页面里面。
- 我们外置的页面一般我们叫做模板,模板里面一般会放置很多的占位符,占位符值得是后面可以通过变量替换出来的。
- 使用模板引擎,把那些占位符通过变量替换出来。
使用示例
html代码:
<!DOCTYPE html>
<html lang="zh_CN">
<head>
<meta charset="UTF-8">
<title>搜索表单</title>
</head>
<body>
<form action="" method="get">
<input type="text" name="kw">
<input type="submit" value="提交">
</form>
<!-- {{ kw }} 形如这样的结构叫做占位符,也可以叫做插值表达式 -->
<p>用户搜索的关键字:<b>{{ kw }}</b></p>
<hr>
</body>
</html>
js代码:
const express = require('express');
const url = require('url');
const path = require('path');
const template = require('art-template');
const app = express();
const port = 3000;
app.get('/search', (req, res) => {
// 获取用户输入的信息
let kw = req.query.kw;
let absPath = path.resolve(__dirname, './views/search.html');
let htmlContent = template(absPath, {kw});
res.send(htmlContent);
})
app.listen(port, () => {
console.log("server is run at port " + port);
})
模板引擎express-art-template
使用示例
html代码:
<!DOCTYPE html>
<html lang="zh_CN">
<head>
<meta charset="UTF-8">
<title>搜索表单</title>
</head>
<body>
<form action="" method="get">
<input type="text" name="kw">
<input type="submit" value="提交">
</form>
<!-- {{ kw }} 形如这样的结构叫做占位符,也可以叫做插值表达式 -->
<p>用户搜索的关键字:<b>{{ kw }}</b></p>
<hr>
</body>
</html>
js代码:
const express = require('express');
const path = require('path');
const app = express();
const port = 3000;
// 静态资源
app.use(express.static('public'));
// 1. 代表我们现在的项目要有 art-template 模板引擎
// 注意:我们在使用时可能在文件中只引用express-art-template,但是我们也需要安装art-template,因为express-art-template需要依赖art-template
app.engine('html', require('express-art-template'));
// 2. 设置 运行模式 debug 调试 production 生成模式 development 开发模式
app.set('view options', {
debug: process.env.NODE_ENV !== 'production'
});
// 3. 设置模板的目录
app.set('views', path.join(__dirname, 'views'));
// 4. 使用模板 art-template
app.set('view engine', 'html');
app.get('/search', (req, res) => {
// 获取用户输入的信息
let kw = req.query.kw;
// render 第一个参数是带渲染的模板,第二个参数就是模板要使用的变量
res.render('search', {kw});
})
app.listen(port, () => {
console.log("server is run at port " + port);
})
Mongoose的使用
使用mongoose这个第三方库来实现mongodb的操作
可以参考:
http://www.mongoosejs.net/
简单示例
首先要安装mongoose
npm install mongoose
// 1、引入mongoose
const mongoose = require('mongoose');
// 2、连接数据库
mongoose.connect('mongodb://localhost/test');
// 3、定义数据模型,参数一表示表名称,参数二表示字段
// 返回值相当于一个构造函数,可以实例化对象,实例化出来的对象代表表中的一条记录
const Cat = mongoose.model('Cat', { name: String });
// 4、实例化
const kitty = new Cat({ name: 'Zildjian' });
// 5、插入数据
kitty.save().then(() => {console.log('成功插入!')});
mongodb常用命令
- 增
- db.表名.save({字段})
- 删
- db.表名.remove({}) 删除所有
- db.表名.remove({字段}) 删除指定字段
- 改
- db.表名.update({字段},{$set:{字段}})
- db.表名.update({字段},{$inc:{字段(数字)}})
- 查
- db.表名.find() 查找所有数据
- db.表名.find({age:19}) 查找指定字段
- db.表名.find({age:{$gt:22}}) 大于22的数据
- db.表名.find({age:{$lt:22}}) 小于22的数据
- db.表名.find({age:{$gte:22}}) 大于等于22的数据
- db.表名.find({age:{$lte:22}) 小于等于22的数据
- db.表名.find({age:{ g t e : 30 , gte:30, gte:30,lte:22})大于等于30小于等于22的数据
- db.表名.find({name:/alley/}) 模糊查询 找到数据中有alley的数据
- db.表名.find({age:/^alley/}) 查找首字符是alley
- db.表名.find({age:/alley$/}) 查找尾字符是alley
- db.表名.find({},{name:1,_id:0}) 只显示name这个字段
- db.表名.find().sort({age:1}) 正序
- db.表名.find().sort({age-1}) 降序
- db.表名.find().limit(n) 显示多少条数据
- db.表名.find().skip(n) 跳过多少条数据
- db.表名.find().skip(n).limit(m) 跳过多少条 显示多少条
- db.表名.findOne({}) 查找一条数据
- db.表名.find().count() 查询表中有多少条数据