Express 是一个保持最小规模的灵活的 Node.js Web 应用程序开发框架,为 Web 和移动应用程序提供一组强大的功能。
当我们使用Express 框架的时候先要下载第三方插件Express模块
命令是 npm install express --save
const express=require('express');
const bodyParser=require('body-parser');
const mysql=require('mysql');
const app = express();
const conn = mysql.createConnection({
host:'localhost',服务器地址
user:'root',用户名
password:'root',密码
database:'yunmeng'链接的数据库名字
})
app.use(bodyParser.urlencoded({
extended: false }))
app.use(bodyParser.json())
app.get('/', (req, res) => {
res.send('Hello World')
})
app.listen(3000, () => {
console.log('server running ...');
})
效果(http://localhost:3000/的时候页面显示Hello World)
对比下原生的get请求执行机制
const http = require('http');
const url = require('url');
http.createServer((req,res)=>{
// 解析url地址 通过url.parse() 方法进行解析
let pathname= url.parse(req.url).pathname;
if(pathname=='/zhao'){
res.write('123');
res.end();
}
console.log(pathname);//在服务器会显示pathname也就是你请求的内容
}).listen(3000,()=>{
console.log('服务器开启');//测试服务器知道开启了
})
直接在 package.json 文件所在的目录下(项目的根目录),创建一个文件app.js(名字自定义)
const express = require('express');
const app = express();
// 针对post请求
const bodyParse = require('body-parser')
// 配置插件
app.use(bodyParser.urlencoded({
extended: false }))
app.use(bodyParser.json())
// 配置静态资源目录 创建一个静态资源文件夹 public(自定义) 访问静态资源文件,访问路径不需要添加public
// 配置多个静态资源目录
app.use(express.static('public'))
// 处理相关的页面逻辑 处理get请求
app.get('/url', (req, res) => {
// 处理用户的请求 如果是get请求, 通过 req.query 获取用户传递的数据
// 数据响应
res.send(data)
})
// 处理post请求
app.post('/url', (req, res) => {
// 处理用户的请求 如果是post请求, 通过 req.body 获取用户传递的数据 , 需要配置插件 body-parser
// 数据响应
res.send(data)
})
// 处理动态路由 /:id 就是动态路由, 比如 /user/:id 可以匹配 /user/xxx 任意一个地址
// 动态路由的参数获取 : 通过 req.params 获取动态路由的参数
app.get('/url/:id', (req, res) => {
// 处理逻辑
// 响应数据
res.send(data);
})
app.listen(3000, () => {
console.log('server ....')
})
get请求解析
get 请求的参数 通过 req.query 获取
执行query()方法的时候可以传递
第一个参数是查询语句
第二个参数可以是数组或者对象;
第三个参数中是错误err,成功后result的结果;
app.get('/login', (req, res) => {
// req.query
console.log(req.query);
let {
user, pwd} = req.query;
// sql语句的占位符 ?
let sql = `select * from admin where name = ? and pwd = ?`
// 执行query()方法的时候可以传递 第二个参数可以是数组或者对象;
conn.query(sql, [user, pwd], (err, result) => {
if(err){
console.log(err);
return;
}
if(result.length){
res.send(result)
}else{
res.send('用户名或者密码错误')
}
})
})
post 请求的参数
通过 req.body 获取
( 但是 不能直接使用,需要安装第三方插件 进行解析后使用; 插件名
body-parser)
app.post('/register', (req, res) => {
// req.body
console.log(req.body);
res.send('这是注册页面')
})
// 1 引入express
const express = require('express');
// nodejs的一个中间件(帮我们完成一些特定功能的插件)
const bodyParser = require('body-parser')
const mysql = require('mysql')
//2 生成实例化对象
const app = express();
// 数据库链接配置
const conn = mysql.createConnection({
host:'localhost',
user:'root',
password:'root',
database:'zuoye'
})
// 需要对插件进行配置
app.use(bodyParser.urlencoded({
extended: false }))
app.use(bodyParser.json())
//3 进行路由匹配 处理get请求 的路由
// 路由匹配:可以匹配很多路由
app.get('/', (req, res) => {
res.send('ok')
})
// get 请求的参数 通过 req.query 获取
app.get('/login', (req, res) => {
// req.query
console.log(req.query);
let {
user, pwd} = req.query;
// sql语句的占位符 ?
let sql = `select * from admin where name = ? and pwd = ?`
// 执行query()方法的时候可以传递 第二个参数可以是数组或者对象;
conn.query(sql, [user, pwd], (err, result) => {
if(err){
console.log(err);
return;
}
if(result.length){
res.send(result)
}else{
res.send('用户名或者密码错误')
}
})
})
// post 请求的参数 通过 req.body 获取 但是 不能直接使用,需要安装第三方插件 进行解析后使用; 插件名 bodyParser
app.post('/register', (req, res) => {
// req.body
console.log(req.body);
res.send('这是注册页面')
})
//
//4 监听端口号
app.listen(3000, () => {
console.log('server running ...');
})
请求方式对应不同的操作
get : 获取数据
post : 提交数据
put : 修改数据
delete : 删除数据
为什么要使用RESTful架构?
REST 是 Representational State Transfer的缩写,如果一个架构符合REST原则,就称它为RESTful架构
RESTful 架构可以充分的利用 HTTP 协议的各种功能,是 HTTP 协议的最佳实践
RESTful API 是一种软件架构风格、设计风格,可以让软件更加清晰,更简洁,更有层次,可维护性更好
接口格式:
请求 = 动词 + 宾语
动词通常就是五种 HTTP 方法,对应 CRUD(C:create 创建;R:read 读取; U:update 更新;D:delete 删除) 操作。
宾语 URL 应该全部使用名词复数,可以有例外,比如搜索可以使用更加直观的 search 。
过滤信息(Filtering) 如果记录数量很多,API应该提供参数,过滤返回结果。 ?limit=10 指定返回记录的数量 ?offset=10 指定返回记录的开始位置。
GET /zoos 列出所有动物园
POST /zoos 新建一个动物园
GET /zoos/:id 获取某个指定动物园的信息
PUT /zoos/:id 更新某个指定动物园的全部信息
PATCH /zoos/:id 更新某个指定动物园的部分信息
DELETE /zoos/:id 删除某个动物园
GET /zoos/:id/animals 列出某个指定动物园的所有动物
DELETE /zoos/:id/animals/:id 删除某个指定动物园的指定动物
参考链接-阮一峰restfulAPI