express框架
npm包管理工具
- 作用: 下载第三方模块
模块: 封装好的一些js库可以直接使用
内置模块 http
第三方模块 axios js.cookie
- 使用:
>npm install 第三方包 //下载
>引入 const axiois = require('./js/xx.js')
- npm 在nodejs安装时一起被安装
npm -v
- npm init 初始应用
package.json文件 项目包描述文件
项目名称
项目作者
项目版本
项目依赖包
安装第三方包,会将依赖自动记录在此文件中
项目拷贝时,下载的第三方文件node_modules不需要拷贝,
在移植的项目中,执行npm install 命令,自动找package.json文件依赖包下载
模块化
-
es6模块化
-
每个js文件都可以看作一个模块 a.js b.js 每个js模块中定义的属性和方法都是私有的
b.js a.js export max() import {max} from './b.js' export {max} max() export default {} import A from './b.js'
-
-
后端commonjs模块化
a.js b.js let num = 100 const {num,route} = require('./a.js') let route = {} module.exports = {num,route} module.exports = {} const A = require('./a.js')
使用express创建web应用
-
创建项目目录 myapp
-
初始化项目 npm init [-y]
-
安装express框架 npm install express
-
使用express创建项目
// 1. 引入express const express = require('express') // 2. 实例化express const app = express() // 应用实例对象 // 3. 创建一个路由 // http://ip:port/hello app.get('/test1', (req, res) => { // 响应数据 res.send('hello world 这是我的第一个express后端程序') }) app.listen(3000, () => console.log('监听3000,启动服务成功'))
路由
路由: 服务端, 定义一个资源,客户端可以路由到这个资源并进行访问
Respond with Hello World!
on the homepage:
app.get('/', function (req, res) {
res.send('Hello World!')
})
Respond to POST request on the root route (/
), the application’s home page:
app.post('/', function (req, res) {
res.send('Got a POST request')
})
Respond to a PUT request to the /user
route:
app.put('/user', function (req, res) {
res.send('Got a PUT request at /user')
})
Respond to a DELETE request to the /user
route:
app.delete('/user', function (req, res) {
res.send('Got a DELETE request at /user')
})
路由拆分
- 定义路由模块 user.js
// 1. 引入express
const express = require('express')
const useRoute = express.Router() // 创建路由对象 规定专门处理用户模块接口
//定义路由 /user
useRoute.get('/',(req,res)=>{
res.send('用户模块')
})
// 注册 /user/sign
useRoute.post('/sign',(req,res)=>{
res.send('注册模块')
})
// 登录 /user/login
useRoute.get('/login', (req,res)=>{
res.send('登录接口')
})
// 后端commonjs模块化规范暴露对象
module.exports = {useRoute}
-
app.js使用路由模块
// 1. 引入express const express = require('express') // 引第三方模块 // 2. 引入 user路由模块 const { useRoute } = require('./route/user.js') // 引入自定义模块 // 引入 product路由模块 const { productRoute } = require('./route/product') // 2. 实例化express const app = express() // 应用实例对象 //集成路由 app.use('/user', useRoute) app.use('/shop', productRoute) app.listen(3000, () => console.log('监听3000,启动服务成功'))
中间件
Express中间件,就是在收到请求后和发送响应之前这个阶段执行的一些函数
app.use([path],function(req,res,next){
// 业务处理
next() // 继续向下执行
})
- 自定义中间件
app.use(function(req,res,next){
// 业务处理
next() // 继续向下执行
})
- 第三方中间件
- body-parser 解析post请求体参数
// 1. 下载第三方中间件
npm i bodyparaser
//2.引入 bodyparaser
const bodyParser = require('body-parser')
// 3. 集成中间件
// bodyParser中间件
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())
4. 请求参数使用
// 注册 /user/sign
useRoute.post('/sign', (req, res) => {
// const username = req.body.username
// const password = req.body.password
const { username, password } = req.body
res.send({
code: 1,
info: {
username,
password,
},
})
})
// 用户信息 /user/find?id=1001
useRoute.get('/find', (req, res) => {
const { id } = req.query
res.send({
code: 1,
info: '你查询的用户id是' + id,
})
})
-
内置中间件
为了提供诸如图像、CSS 文件和 JavaScript 文件之类的静态文件,请使用 Express 中的
express.static
内置中间件函数。app.use(express.static('public'))
-
跨域资源共享cors中间件
1. 下载cors npm i cors 2. app.js文件中引入 cors const cors = require('cors') 3. 集成中间件 app.use(cors())
-
热更新
1. 下载 supervisor npm i supervisor -g 全局安装/本地安装 本地安装: 在本项目起作用 全局安装: 所有项目起作用 2. 命令行执行 >supervisor app.js 3. 配置 npm start 启动 package.json文件中 "scripts": { "start": "supervisor app.js" },
脚手架
创建项目需要基础目录及文件
npx express-generator --view=ejs //--view指定模板
npm install | npm i 安装依赖
npm start
文件上传
-
前端
<!-- 上传头像 --> <input type="file" name="headerImg" /><br/> let headerImgFile = headerImgInput.files[0] // 文件对象 // console.log(headerImgInput.files[0]); let formDate = new FormData() //formDate.append('username',username) formDate.append('headerImg',headerImgFile) let res = await axios({ method: 'post', url: 'http://10.7.162.73:3000/user/upload', headers:{'content-type':'multipart/form-data'}, data: formDate, }) console.log(res.data)
-
后端
安装 multer npm i multer const multer = require('multer') // 1 引入multer // const multerUpload = multer({dest:'public/upload'}) // 2. 实例化multer上传对象 const storage = multer.diskStorage({ destination: 'public/upload', // 存储目录 filename: function (req, file, cb) { cb(null, Date.now() + '.jpg') //文件名 }, }) // 2. 实例化multer上传对象 const multerUpload = multer({storage}) //路由使用 /** * 文件上传接口 * /user/upload */ router.post('/upload', multerUpload.single('headerImg'), (req, res, next) => { console.log(req.file) console.log(req.body) res.send({ code: 1, file: req.file, body: req.body, }) })