零基础入门Express

2019-08-17  本文已影响0人  清汤饺子

nodemon
安装npm install -g nodemon
运行:nodemon

1.express介绍

// 导入express模块
var express = require('express');
//形成实例
var app = express();
//get方法 生成路由
app.get('/',(req,res)=>{
    res.send('this is homepage')
})
//监听在一个端口上
app.listen(3000);
nodemon 运行 127.0.0.1:3000直接访问到路由

2.express的应用Application

这个app对象通常表示Express应用程序,通过调用express()Express模块导出的顶级函数来创建它

var express = require("express");
var app = express();

属性

事件

方法

x-www-form-urlencoded:标准的表单提交
form-data:有文件上传的表单提交

body-parser官网
npm install body-parser --save
multer:处理文件上传
安装:npm install --save multer
博客推荐:

image.png

文件上传实例:

var express = require('express');
var bodyParser = require('body-parser');
var fs = require('fs'); 
var app = express();
var multer  = require('multer');
var createFolder = (folder)=>{
    try{
        fs.accessSync(folder)
    }catch(e){
        fs.mkdirSync(folder)
    }
}
var uploadFolder = './upload/'
createFolder(uploadFolder);
var storage = multer.diskStorage({
    destination: function (req, file, cb) {
      cb(null, uploadFolder)
    },
    filename: function (req, file, cb) {
      cb(null, file.originalname)
    }
  })
   
  var upload = multer({ storage: storage })

// parse application/x-www-form-urlencoded
//中间件函数,就是在请求和响应之间,把请求内容进行处理 
app.use(bodyParser.urlencoded({ extended: false }))
app.get('/form',(req,res)=>{
    var form = fs.readFileSync('./form.html',{encoding:"utf8"}) 
    res.send(form); 
})
//模拟post请求,谷歌浏览器Postman插件
app.post('/upload',upload.single('logo'), (req,res)=>{
    console.dir(req.file);
    /**{ fieldname: 'logo',
     originalname: 'test.py',
    encoding: '7bit',
    mimetype: 'text/x-python-script',
    destination: './upload/',
    filename: 'logo-1566119695314',
    path: 'upload/logo-1566119695314',
    size: 7 }
   */
    res.send({'render_code':0})
})
app.listen(3000);
// parse application/json
//处理JSON数据
// app.use(bodyParser.json())


// app.use(function (req, res) {
//     res.setHeader('Content-Type', 'text/plain')
//     res.write('you posted:\n')
//     res.end(JSON.stringify(req.body, null, 2))
// })
上传成功的文件

3.express的响应Response

Res对象表示Express应用程序在收到HTTP请求时发送的HTTP响应。

var express = require('express');
var app = express();
app.get('/person/:id',(req,res)=>{
    res.send('user:'+req.params.id)
})
app.listen(3000)
image.png

res的属性

app.get('/person/:id',(req,res)=>{
    console.dir(res.headersSent)//false
    res.send('user:'+req.params.id)
    console.dir(res.headersSent)//true
})

res的方法

属性 类型 描述
domain cookie的域名,默认为应用程序的域名
encode 功能 用于cookie值编码的同步函数
expires 日期 cookie到期日
httpOnly 布尔 标记cookie只能由web服务器访问
maxAge 用于设置相对于当前时间的到期时间
path Cookie的路径
secure 布尔 将cookie标记为仅与HTTPS一起使用
signed 布尔 指示cookie是否应该签名
sameSite 布尔或串 Set-Cookie属性的值
res.cookie('name','tangjiao',{
    domain:'.qq.com',
    httpOnly:true,
    expires:new Date(new Date().getTime()+9000),
    path:'/person',
    maxAge: 12000000,
})
res.redirect('/foo/bar');
res.redirect(301,'www.baidu.com')

4.express的请求Request

该req对象表示HTTP请求,并具有请求查询字符串,参数,正文,HTTP Header等的属性。

res.get('/user/:id',(req,res)=>{
    res.send(req.params.id)
})

属性

方法

req.get("Content-Type");//"text/plain"

5.express的路由Router

路由器对象是中间件和路由的独立实例。您可以将其视为一个“迷你应用程序”,仅能执行中间件和路由功能。每个Express应用程序都有内置的应用程序路由器。

方法

router.get('/user',(req,res)=>{
    res.send('user')
})

6.将模板引擎用于 Express

在 Express 可以呈现模板文件之前,必须设置以下应用程序设置:

views:模板文件所在目录。例如:app.set('views', './views')
view engine:要使用的模板引擎。例如:app.set('view engine', 'pug')
然后安装对应的模板引擎 npm 包:
npm install ejs --save


7.中间件

中间件函数是可以访问request/response以及app的request-response周期的下一个中间件函数的函数,下一个中间件函数由next()表示。
中间件函数的功能:

中间件的类型

i.app的中间件

var app = express()
//没有装载路径的中间件功能,每次app收到请求时都会执行该功能
app.use((req,res,next)=>{
    console.log('Time:'+Date.now())
    next();
})
//此示例显示了路由及其处理函数(中间件系统)。该函数处理对/user/:id路径的GET请求。
app.get('/user/:id', function (req, res, next) {
  res.send('USER')
})

ii.router的中间件

和app中间件功能一致,只不过它被绑定到一个实例express.Router()。

iii.错误处理中间件

以与其他中间件函数相同的方式定义错误处理中间件函数,除了四个参数而不是三个,特别是(err, req, res, next)):

app.use(function (err, req, res, next) {
  console.error(err.stack)
  res.status(500).send('Something broke!')
})

iv.第三方中间件

使用第三方中间件为Express应用程序添加功能
app.use(bodyParser.urlencoded({ extended: false }))

上一篇下一篇

猜你喜欢

热点阅读