Node.js学习第四天
1. 基本使用
- 安装
npm i [email protected]
- 创建最基本的web服务器
const express=require('express')
const app=express()
app.listen(80,()=>{
console.log('express server running at http:127.0.0.1')
})
- 监听请求
app.get(url,function(req,res){
})
app.post(url,function(req,res){
})
- 响应内容
app.get('/user',(req,res)=>{
// 响应JSON数据
res.send({name:'zs'})
})
app.post('/user',(req,res)=>{
// 响应文本内容
res.send('请求成功')
})
- 获取req的查询参数
app.get('/',(req,res)=>{
// ?name=zs&age=18
console.log(req.query.name) // zs
})
- 获取路径参数
app.get('/user/:id',(req,res)=>{
console.log(req.params)
})
- 托管某个文件夹下的静态资源
app.use(express.static('public'))
app.use(express.static('files'))
- 托管静态资源加上请求前缀
app.use('/public',express.static('public'))
// http:localhost:3000/public/images/kitten.jpg
2. nodemon
- 热部署服务器工具
npm i nodemon
3. express 路由
- router.js
const express=require('express')
const router=express.Router()
router.get('/user/list',(req,res)=>{
})
module.exports=router
- 注册路由(index.js)
const userRouter=require('./router.js')
app.use(userRouter)
- 添加路由前缀
app.use('/api',userRouter)
4. Express 中间件
const mw=function(req,res,next){
console.log('这是一个最简单的中间件函数')
// 交给下一个中间件或者路由,必须的
next()
}
// 全局中间件
app.use(mw)
- 定义多个全局中间件
app.use(function(req,res,next){
console.log('第一个中间件')
next()
})
app.use(function(req,res,next){
console.log('第2个中间件')
next()
})
app.use(function(req,res,next){
console.log('第3个中间件')
next()
})
app.get('/user',(req,res)=>{
// 依次经过上面的中间件才到达这里
res.send('home page')
})
- 局部中间件
const mv1=function(req,res,next){
console.log('这是中间件函数')
next()
}
// 当前路由生效
app.get('/',mv1,function(){
})
// 不影响该路由
app.get('/user',function(req,res){
...
})
- 定义多个局部中间件
app.get('/',mv1,mv2,(req,res)=>{
})
app.get('/',[mv1,mv2],(req,res)=>{
})
5. 中间件分类
5.1 应用级别的中间件
- 绑定在app实例上的中间件
app.use((req,res,next){
next()
})
app.get('/',mv1,function(req,res){
})
5.2 路由级别中间件
const app=express()
const router=express.Router()
// 路由级别中间件
router.use(function(req,res,next){
next()
})
app.use('/user',router)
5.3 错误级别的中间件
- 错误级别中间件必须注册在所有的路由之后
- 四个参数(err,req,res,next)
app.get('/',function(req,res){
throw new Error('xxx')
res.send('home page')
})
app.use(function(err,req,res,next){
console.log('发生了错误'+err.message)
})
5.4 Express内置中间件
5.5 第三方中间件
6. 跨域资源共享
更多请看nodejs第四天资料
6. 数据库
- 项目中操作mysql
npm i mysql
- db.js
const mysql=require('mysql')
const db=mysql.createPool({
host:'127.0.0.1',
user:'root',
password:'root',
database:'my_db_01'
})
module.exports=db
- 查询sql
const db=require('../db/index')
db.query('select * from users',(err,results)=>{
if(err){
return console.log(err.message)
}
console.log(results)
})
- 新增sql
// 数据对象
const user={username:'zs',age:12}
// 定义sql
const sqlStr='insert into users(username,age) values (?,?)'
// 数组形式填充占位符
db.query(sqlStr,[user.username,user.age],(err,results)=>{
if(err){
return console.log(err.message)
}
if(results.affectedRows===1){
console.log('插入数据成功')
}
})