目录
nodejs搭建静态资源服务器
Express框架
01-express基本使用
02-express响应客户端数据
03-express托管静态资源
04-express中间件使用
图书管理后台
项目介绍
步骤
1.导入模块.必选http,fs,可选path
2.创建服务器.利用http模块的createServer方法创建服务器
3.启动服务器.利用http模块的listen方法启动服务器
注意:
1.html中所有的外部链接(href、src),都会变成网络请求,比如外链css,js,图片音视频等
2.可以使用字符串的startsWith方法判断是否在同一目录下,在同一目录下的文件数据可以统一使用模板字符串,作为fs.readfile的地址,避免写多个分支if else
如
fs.readFile(`${__dirname}/www${req.url}`, (err, data) => {
if (err) {
throw err
} else {
res.end(data)
}
})
/*
1.html中所有的外部链接(href、src),都会变成网络请求
*/
// 1导入模块
const http = require('http')
const fs = require('fs')
// 2创建服务器
const app = http.createServer((req, res) => {
// (1)req请求报文
console.log(req.url);
// (2)处理数据
if (req.url === '/') {
// (3)res响应报文
fs.readFile(`${__dirname}/www/index.html`, (err, data) => {
if (err) {
throw err
} else {
res.end(data)
}
})
}
else if (req.url.startsWith('/resource')) {
fs.readFile(`${__dirname}/www${req.url}`, (err, data) => {
if (err) {
throw err
} else {
res.end(data)
}
})
}
else {
res.end('404 NOT FOUND')
}
})
// 3启动服务器
app.listen(3002, () => {
console.log('服务器开启成功')
})
Express是NodeJS开发中一个非常重量级的第三方框架,它对于NodeJS服务端就相当于Jquery对于HTML客户端。
官网链接 中文官网
Express :基于 Node.js 平台,快速、开放、极简的 web 开发框架。
Express一个非常重要的亮点就是它没有改变nodejs已有的特性,而是在它的基础上进行了拓展
也就是说,使用Express你既可以使用nodejs原生的任何API,也能使用Express的API
Express三大核心功能
1.托管静态资源
nodejs实现静态服务器功能在express中只需要一行代码
2.路由
express自带路由功能,让Node服务端开发变得极其简单
express支持链式语法,可以让代码看起来更加简洁
==3.中间件==
Express最为核心的技术和思想,万物皆中间件
中间件虽然理解起来有点困难,但是使用起来非常方便,类似于bootstrap插件.
1.给npm下载加速包 淘宝镜像
npm config set registry https://registry.npm.taobao.org/
2.下载express
npm i express
// 1.导入express模块
const express = require('express')
// 2.创建服务器
const app = express()
//3.路由(接口文档):一个请求路径对应一个处理函数
app.get(("/"), (req, res) => {
console.log(1);
})
app.get(("/login"), (req, res) => {
console.log('2')
})
// 3.开启服务器
app.listen(3000, () => {
console.log('服务器启动成功')
})
注意:
1.
非文件数据:res.send(数据)
文件数据:res.sendFile(文件绝对路径)
//1.导入模块
const express = require('express')
//2.创建服务器
let app = express()
// 3.写路由
/*
非文件数据:res.send(数据)
文件数据:res.sendFile(文件绝对路径)
*/
app.get('/', (req, res) => {
// 响应中文:express自动
res.send('我是首页')
// node.js原生,中文报乱码
// res.end('我是首页')
})
app.get('/list', (req, res) => {
let obj = {
data: [10, 20, 30],
code: 200,
message: '请求列表成功'
}
//响应json数据
res.send(obj)
// 原生nodejs:只能识别字符串+二进制。如果是对象需要先转json
// res.end(JSON.stringify(obj))
})
app.get('/login', (req, res) => {
// 响应网页 自动帮我们读取文件并且响应
res.sendFile(`${__dirname}/login.html`)
})
//3.开启服务器
app.listen(3000, () => {
console.log('success')
})
注意:
托管静态资源(相当于我们之前写的静态资源服务器)
1.当请求路径为/时,express会自动读取www文件夹中的index.html文件响应返回
2.当路径请求为www文件夹中的静态资源,express会自动拼接文件路径并响应返回
app.use(express.static('www'))//www是文件夹名
//1.导入模块
const express = require('express')
//2.创建服务器
let app = express()
//托管静态资源(相当于我们之前写的静态资源服务器)
/*
1.当请求路径为/时,express会自动读取www文件夹中的index.html文件响应返回
2.当路径请求为www文件夹中的静态资源,express会自动拼接文件路径并响应返回
*/
app.use(express.static('www'))
//3.开启服务器
app.listen(3000, () => {
console.log('success')
})
get参数:req.query
post参数:req.body
*借助第三方中间件:body-parser
*(1)下载:npm i body-parser
*(2)导入:const bodyParser =require('body-parser')
*(3)使用: app.use(bodyParser.urlencoded({extended:false}))
*(3)使用:app.use(bodyParser.json())
/*
get参数:req.query
post参数:req.body
*借助第三方中间件:body-parser
*(1)下载:npm i body-parser
*(2)导入:const bodyParser =require('body-parser')
*(3)使用: app.use(bodyParser.urlencoded({extended:false}))
*(3)使用:app.use(bodyParser.json())
*/
//1.导入模块
const express = require('express')
//2.创建服务器
let app = express()
//(1) 使用中间件
const bodyParser = require('body-parser')
app.use(bodyParser.urlencoded({ extended: false }))// 表单请求头
// (2)解析json参数
app.use(bodyParser.json())//json请求头
// 写路由
app.get('/list', (req, res) => {
//(1)req:请求报文
console.log(req.url)
//获取get参数:自动对url进行切割处理,然后将参数放入 query对象中
console.log(req.query)
//(2)处理
//(3)res:响应报文
res.send(req.query)
})
app.post('/add', (req, res) => {
console.log(req.body)
// 告诉客户我收到的参数
res.send(req.body)
})
//3.开启服务器
app.listen(3000, () => {
console.log('success')
})
1.了解Express搭建服务端项目的流程
- a.导入express
- b.创建服务器
- c.配置中间件
- d.路由
- e.开启服务器
2.了解服务端路由处理流程(路由:其实就是前端的接口文档)
- 请求 : 获取客户端发送过来的参数
- 处理: 增删改查数据库
- 响应 :将数据库的操作结果返回给客户端
//1.导入模块
const express = require('express')
//2.创建服务器
let app = express()
// 3.托管静态资源
app.use(express.static('www'))
// 4.配置中间件
// (1)导入模块
const bodyParser = require('body-parser')
// (2)使用中间件
app.use(bodyParser.urlencoded({ extended: false }))// 表单请求头
app.use(bodyParser.json())//json请求头
// 数据库中间件
const book = require(`./data/book.js`)
// 5写路由
// 5.1查询图书列表
app.get('/api/getbooks', (req, res) => {
book.getbooks((err, data) => {
if (err) {//服务器数据库错误
res.send({
code: 500,
msg: '服务器内部错误'
})
} else {//成功
res.send({
code: 201,
msg: "请求成功",
data: data.books
})
}
})
})
// 5.2新增图书
app.post('/api/addbook', (req, res) => {
book.addbook(req.body, (err) => {
if (err) {//服务器数据库错误
res.send({
code: 500,
msg: '服务器内部错误'
})
} else {//成功
res.send({
code: 201,
msg: "新增图书成功",
})
}
})
})
// 5.3删除图书
app.get('/api/delbook', (req, res) => {
book.delete(req.query.id
, (err) => {
if (err) {//服务器数据库错误
res.send({
code: 500,
msg: '服务器内部错误'
})
} else {//成功
res.send({
code: 201,
msg: "删除图书成功",
})
}
})
})
//3.开启服务器
app.listen(3000, () => {
console.log('success')
})