简述:
node.js 一个基于 javascript 运行环境的服务器语言,它的出现使得 javascript 有能力去实现服务器的操作,在 GitHub 上 node.js 的 star 数已经接近 6 万,可见其受欢迎程度;而基于 node.js 的 Express 则把原先的许多操作,变得简单灵活,一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具,使用 Express 可以快速构建一个完整功能的网站 。
express 框架安装:
安装方式一:
- npm init
- npm install express --save
使用语法:
// 引入包文件
let express = require('express')
// 实例化一个 express 对象
let app = express()
// 配置路由,发送请求实现页面逻辑 (字符串模式的路由)
app.get('/login', (req, res) => {
res.send('这是 login 页面')
})
// 设置端口,开启服务
app.listen(8080, () => {
console.log('设置端口,开启服务', 'http://127.0.0.1:8080')
})
安装方式二:
- npm i express-generator -g 全局安装。
- express --version 查看版本。
- express --view=ejs app 创建项目 (ejs为模板,可选)。
- npm install 自动下载安装 package.json 文件中记录的依赖版本。
express路由简介:
概念:路由表示应用程序端点(URL)的定义以及响应客户端请求的方式,它包含一个请求方式(methods),路径(path)和路由匹配的函数(callback)
语法:app.methods(path,callback)
express路由方法:
express 路由方法:源于 http 方法之一,附加到 express 类的实例,它可请求的方法包括 get,post,put,head,delete,postions,trace,copy,lock,mkcol,move,purge,propfind,proppatch,unlock,report,mkactivity,checkout,merge,m-search,notify,subscribe,unsubscribe,patch,search,connect 等 。
express路由路径:
- 字符串路径:
// 此地址将与/login匹配 app.get('/login',(req,res)=>{ res.send('hello world') })
- 字符串模式路径:
// 此路由路径将与acd 或者 abcd匹配 app.get('/ab?cd',(req,res)=>{ res.send('hello world') })
- 正则表达式路由:
// 匹配 a后面至少10个数字 路径 app.get(/\/a\d{10}/, (req, res) => { res.send('这是 newPage 页面') })
动态路由实现:
// 通过 req.params 拿参数,实现动态路由
app.get('/user/:userId/books/:bookId',(req,res,next)=>{
res.send(req.params)
// 调用下一个函数
next()
},
(req,res)=>{
res.json(Array.from(data))
})
// Route path: /user/:userId/books/:bookId
// Request URL: http://localhost:3000/user/34/books/8989
// req.params: {'userId':'34','bookId':'8989'}
路由实例:
// ========================数据库操作===============================
// mysql 封装
// 【1】,引入库============================================
let mysql = require('mysql')
// 【2】,连接数据库========================================
// 2.1,创建配置对象
let options = {
host: 'localhost',
port: '3306', // 可选,默认3306
user: 'root',
password: 'xxxxxx',
database: 'mydbNew'
}
// 2.2,创建连接对象 (返回连接对象)
let con = mysql.createConnection(options)
// 2.3建立连接
con.connect((err) => {
if (err) {
console.log(err)
} else {
console.log('数据库连接成功')
}
})
// 【3】,执行数据库语句========================================
// sql语句执行封装
function sqlQuery(strSql, arr) {
return new Promise(function(resolve, reject) {
con.query(strSql, arr, (err, results) => {
if (err) {
reject(err)
} else {
resolve(results)
}
})
})
}
// ===========================================================
// 引入包文件
let express = require('express')
// 实例化一个 express 对象
let app = express()
// 1,配置路由,发送请求实现页面逻辑 (字符串模式的路由)
// 匹配 login 路径
app.get('/login', async(req, res) => {
let strSql = 'select * from login'
let result = await sqlQuery(strSql)
res.json(Array.from(result))
res.send('这是 login 页面')
})
// 2,配置路由,发送请求实现页面逻辑 (类字符串模式的路由)
// 匹配 abcd 或者 acd 路径, [? 可有可无,+ 至少一个,* 任意多个]
app.get('/ab?cd', (req, res) => {
res.send('这是 abcd / acd 页面')
})
// 3,配置路由,发送请求实现页面逻辑 (正则表达式的路由)
// 匹配 a后面至少10个数字 路径
app.get(/\/a\d{10}/, (req, res) => {
res.send('这是 newPage 页面')
})
// 设置端口,开启服务
app.listen(8080, () => {
console.log('设置端口,开启服务', 'http://127.0.0.1:8080')
})
获取 get 请求参数:
通过 req.query 对象获取。
// 导入相关包
let express = require('express')
let cors = require('cors')
// 初始化 express 对象
let app = express()
// 设置允许跨域
app.use(cors())
// 配置路由,内部实现具体的业务逻辑
app.get('/login', function(req, res) {
console.log(req.query)
res.json(req.query)
})
// 监听端口,并开启服务
app.listen(3000, function() {
console.log('服务器启动成功,可通过 http://127.0.0.1:3000 访问')
})
获取 post 请求参数:
express 中获取 post 请求参数,需要借助中间件 urlencoded,
语法: app.use(express.urlencoded()) req.body
// 导入相关包文件
let express = require('express')
let cors = require('cors')
// 初始化 express 对象
let app = express()
// 设置跨域
app.use(cors())
// 使用 urlencoded 中间件
app.use(express.urlencoded())
// 配置路由,内部实现具体的业务逻辑
app.post('/login', function(req, res) {
console.log(req.body)
res.json(req.body)
})
// 监听端口,并开启服务
app.listen(3000, function() {
console.log('服务器启动成功,可通过 http://127.0.0.1:3000/login 访问!')
})
中间件相关:
未完结,待补充 。。。。。。