node.js express框架的使用

express官网

https://www.expressjs.com.cn/
这个翻译的版本比较好http://caibaojian.com/expressjs/index.html

npm init -y
安装 npm i express -S
创建server.js

一、基本路由

//server.js

const express = require('express') 	
const app = express() 	
// 查找
app.get('/', (req, res) => {
  res.send('get')
})

// 添加
app.post('/', (req, res) => {
  res.send('post')
})

// 修改
//put是全局修改
app.put('/', (req, res) => {
  res.send('put')
})
//patch是局部修改
app.patch('/', (req, res) => {
  res.send('patch')
})

// 删除
app.delete('/', (req, res) => {
  res.send('delete')
})

//无论什么类型的请求都可以
app.all('/', (req, res) => {
  res.send('all')
})


//动态路由
app.get('/index/:id/:name', (req, res) => {
  console.log(req.params.id)
  console.log(req.params.name)
  res.send('match.')
})

app.listen(3000, () => {
  console.log('localhost:3000')
})

同一个路由的简写方法

app.route('/')
  .get((req, res) => {
    res.send('get')
  })
  .post((req, res) => {
    res.send('post')
  })

二、中间件

1、必须有next才会执行下一个中间件的内容**
const controller1 = (req, res, next) => {
  // res.send('users')
  console.log('users')
  req.users = 'users'//将controller1 中间件的内容传递给下一个中间件
  next()
}

const controller2 = (req, res, next) => {
  // res.send('roles')
  console.log('roles')
  next()
}

app.get('/users', [controller2, controller1], (req, res, next) => {
  console.log(req.users)//使用req.users接收到controller1传递的内容
})

运行结果 roles users users

2、只要中间件栈匹配了就会往下执行
app.get('/', (req, res, next) => {
  console.log(0)
  next()
})

app.get('/', (req, res, next) => {
  console.log(1)
})

打印结果0 1,如果没有next只会打印0

3、路由级中间件

router.use可以匹配任何请求的方式

const router = express.Router()
router.use('/',(req,res)=>{
    //res.send('router')
    next()
})
router.get('/user',(req,res,next)=>{
    res.send('user')
})
app.use('/',router)
4、错误处理中间件
app.use(function(err, req, res, next) {
  console.error(err.stack)
  res.status(500).send('Something broke!');
})
5、内置中间件

静态资源中间件http://caibaojian.com/expressjs/starter/static-files.html

app.use(express.static('public'));

三、express生成器

通过应用生成器工具 express 可以快速创建一个应用的骨架

  • 全局安装express生成器
    npm install express-generator -g
  • 在当前工作目录下创建一个命名为 myapp 的应用,-e表示ejs
    express -e myapp
  • 安装依赖
    npm install

四、模板引擎的使用

1、ejs

  • views, 放模板文件的目录,比如: app.set(‘views’, ‘./views’)
  • view engine, 模板引擎,比如: app.set(‘view engine’, ‘ejs’)
安装ejs

npm i ejs -S

2、art-template

官网http://aui.github.io/art-template/express/

  • 安装
    npm install --save art-template
    npm install --save express-art-template
var express = require('express');
var app = express();

// view engine setup
app.engine('art', require('express-art-template'));

app.set('view options', { //注意此处和官网不一样
  debug: process.env.NODE_ENV !== 'production',
  escape: false // 是个坑,转化HTML5代码
});

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'art');

// routes
app.get('/', function (req, res) {
    res.render('index.art', {
        user: {
            name: 'aui',
            tags: ['art', 'template', 'nodejs']
        }
    });
});

五、muter上传图片

https://github.com/expressjs/multer/blob/master/doc/README-zh-cn.md

  • 安装
    npm install --save multer
  • 使用
var express = require('express')
var multer  = require('multer')
var upload = multer({ dest: 'uploads/' })

var app = express()

app.post('/profile', upload.single('avatar'), function (req, res, next) {
  // req.file 是 `avatar` 文件的信息
  // req.body 将具有文本域数据,如果存在的话
})

app.post('/photos/upload', upload.array('photos', 12), function (req, res, next) {
  // req.files 是 `photos` 文件数组的信息
  // req.body 将具有文本域数据,如果存在的话
})

var cpUpload = upload.fields([{ name: 'avatar', maxCount: 1 }, { name: 'gallery', maxCount: 8 }])
app.post('/cool-profile', cpUpload, function (req, res, next) {
  // req.files 是一个对象 (String -> Array) 键是文件名,值是文件数组
  //
  // 例如:
  //  req.files['avatar'][0] -> File
  //  req.files['gallery'] -> Array
  //
  // req.body 将具有文本域数据,如果存在的话
})

猜你喜欢

转载自blog.csdn.net/weixin_44157964/article/details/106952323