美文网首页
零基础入门Express

零基础入门Express

作者: 清汤饺子 | 来源:发表于2019-08-17 21:21 被阅读0次

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

1.express介绍

  • express是什么呢?
    express是基于Node.js平台,快速/开发/极简的web开发框架
  • express能够做什么呢?
    他能够写一些web的应用/写一个网站/聊天室/商城/给前端提供API
  • 如何安装?
    npm install express --save
  • express的特性
    1. 它是一个简单的路由系统
    2. 它集成了很多模版引擎
    3. 它是一个中间件系统
  • 一个简单的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();

属性

  • app.locals
    这个对象的属性是应用程序中的局部变量。

事件

  • app.on('mount',callback(parent))
    当子应用程序挂载到父应用程序上时,会触发mount事件

方法

  • app.all(path,callback[,callback])
  • app.listen([port[,host[,backlog]]][,callback])
    绑定并侦听指定主机和端口上的连接
    app.listen(3000)
  • app.delete()
    用指定的回调函数将HTTP DELETE 请求路由到指定的路径
  • app.get()
    用指定的回调函数将HTTP GET请求路由到指定的路径
  • app.post()
    用指定的回调函数将HTTP POST请求路由到指定的路径
    表带提交使用Post提交
    模拟表单数据安装body-parser插件

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的属性

  • res.headersSent表示应用程序是否为响应发送了HTTP Header
app.get('/person/:id',(req,res)=>{
    console.dir(res.headersSent)//false
    res.send('user:'+req.params.id)
    console.dir(res.headersSent)//true
})

res的方法

  • res.append(field[,value])
    将指定的内容追加value到HTTP响应头field。
  • res.attachment([文件名])
    将http响应Content-Disposition头字段设置为"attachment"
  • res.cookie(name,value,[,options])
    设置cookie
属性 类型 描述
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.clearCookie(name,[,options])
    清除指定的cookie name
    res.clearCookie('name',{path:'admin'})
  • res.end([data][,encoding])
    结束响应过程
    res.end
  • res.json()
    发送JSON响应
    res.json({user:'tang'})
  • res.jsonp()
    使用jsonp支持发送json响应
    res.jsonp({user:'tang'})
  • res.redirect([status,]path)
    重定向到指定的url
res.redirect('/foo/bar');
res.redirect(301,'www.baidu.com')
  • res.render(view[,locals][,callback])
    将要呈现的HTML字符串发送到客户端
  • res.send([body])
    发送HTTP响应
    re.send('hello world')
  • res.sendFile(path[,options][,fn])
  • res.sendStatus
    将响应HTTP状态代码设置为statusCode并将其字符串表示形式发送为响应正文。
    res.sendStatus(200)//相当于res.status(200).send('OK')

4.express的请求Request

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

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

属性

  • req.app
    表示对使用中间件的Express应用程序实例的引用
  • req.baseUrl
    安装路由器实例的URL路径
  • req.body
    表示请求正文中提交的键值对数据
  • req.cookies
    包含请求发送的cookie的对象
  • req.hostname
    表示http请求的主机名
  • req.ip
    表示请求的ip地址
  • req.params
    表示路由映射的参数
  • req.query
    表示路由中每个查询字符串的属性

方法

  • req.get()
    返回指定的HTTP请求表头字段
req.get("Content-Type");//"text/plain"

5.express的路由Router

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

方法

  • router.all(path,[callback,]callback)
    它匹配所有的路由方法
  • router.get()
    匹配get请求
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 }))

相关文章

网友评论

      本文标题:零基础入门Express

      本文链接:https://www.haomeiwen.com/subject/qfcksctx.html