express 学习笔记分享

发布于 2022-10-24 13:46:46 字数 9529 浏览 97 评论 0

首先要知道 express 是干什么的。他是我们 nodejs 使用的框架,就跟我们前端 js 要用 angular 一样,这是后端的框架,可以简化我们的代码,实现快速,简单的开发。另外,express 跟其他的工具搭配,会更强。比如第三方中间件,因为 express 只有一个内置的 static 来处理静态文件的中间件。比如学过的 bodyParser (处理json和查询字符串)

app

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

app.get('/', function(req, res){
  res.send('im SYJ');
});

app.listen(8080);

app.locals 一个用来存储属性的空对象
当模板渲染对象时,会将locals和 我们传在render里的对象 合并为一个。
当我们在locals 中设置属性,所有的模板就都有这个属性了。
感觉后续用法有待开发

app.use 使用中间件 第一个参数可以是具体的设置路径,第二是callback

app.get 可以获取app.set()设置的值、设置路由

app.post 设置post请求路由

app.all('*') all + '*' 表示所有请求

app.route 设置路由

var app = express();

app.route('/events')
.all(function(req, res, next) {
在 path 为'/events' 的路由前执行,可以设定中间件

})
.get(function(req, res, next) {
  res.send(...);
})
.post(function(req, res, next) {
  
})

Request

req.body 请求体

通常请求体 中的数据需要用事件监听来获取。第三方中间件可以自带监听并处理。比如body-parser中的json()来处理json格式的,urlencoded({ extended: true }) 来处理查询字符串 Multer处理http 提交 multipart/form-data,也就是文件上传

拓展 multipart/form-data 常用的表单上传文件的方式,比如写邮件添加附件。发送的也是字符串,只不过不是常见的key=value那种,而是加了分隔符等内容的构造体 --开始-- --分割-- -- 结尾--

req.path 请求路径-->pathname

req.method 请求方式

req.hostname 请求主机名 -->www.baidu.com

req.query 请求的查询字符串

req.headers 请求头

req.params 请求路径参数
如果我们写了一个 route(路由)是 user/:name/:name2
第二个路径名就可以 req.params.name 这样取到。带: 的都会以 key value 的方式 {name:'',name1:''} 放到 req.params 中。

Response

res.end 结束 response 进程,相当于 nodejs 中的 end

res.send 结束并返回数据。 参数支持对象格式的,数字,以及字符串。

res.json 结束并 JSON.stringify 你的参数,比如 res.json({name:22})

res.status(code) res.status(403).end();

res.set() 设置响应头

    res.set('Content-Type', 'text/plain');

    res.set({
        'Content-Type': 'text/plain',
        'Content-Length': '123',
        'ETag': '12345'
        })
        //对象里面重复的后面会把前面的覆盖
    res.set('Set-Cookie','name=syj')

res.get() 获取设置的属性值

   res.get('Content-Type'); //text/plain

res.render 读取模板引擎 并且返回给客户端
支持三个参数,(view [, locals] [, callback])
第一个参数是读取的模板文件名,第二个是需要替换的属性值,{username:'SYJ'} 第三个是 callback 后面两个参数可以不传。

app.get('/contact',function(req,res){
    res.render('contact',{msg:'contact'});
});

res.cookie(name,value,options)

Sets cookie name to value

header 1 | header 2

PropertyTypeDescription
domainString只有访问 domain 对应的域名才会设置 cookie
expiresDate也代表 cookie 的生存期,value 是一个过期时间,比如 new Date(Date.now()+20*1000)}) 不写或者设 0 默认为会话 cookie,存在客户端内存中
httpOnlyBoolean仅在 http 协议下设定 cookie
maxAgeString设置 cookie 过期时间,倒计时 设置毫秒
pathString只有访问path对应的路径才会设置 cookie,默认 '/'
secureBoolean仅在 https 协议下有 cookie
signedBoolean是否有签名。需要 使用中间件添加秘钥 1.app.use(cookieParser('syj'));2.res.send(req.signedCookies);此时cookie在req.signedCookies上

中间件

内置 static('/root',{options})

body-parser

第三方 用来处理请求体中的数据,require 并使用 use 这个中间件,会自动处理 post 请求 ,request.body 中的数据。json 字符串,查询字符串都转化为对象

var bodyParser=require('body-parser');
app.use(express.bodyParser())

multer

用来处理 http 提交 multipart/form-data,也就是文件上传。详细 api 见 https://github.com/expressjs/multer

var multer = require ( 'multer' )
app.use(multer({ dest: './uploads/' }))

cookie-parser

处理请求头中的 cookie,并把其转化为对象,放到 request 上。在 use 这个中间件下面都可以用 request.cookies 取到传过来的 cookie。
原生使用 request.headers['cookie'] 取到一个字符串 '; ' 分割的
另外 response.cookie 可以设置 cookie,注意区分。

response.cookie(name,value,{options})..

原生只能使用

res.setHeader('Set-Cookie',"age=6; Domain=localhost");
var cookieParser = require('cookie-parser');
app.use(cookieParser()) 
//支持传秘钥参数

session-parser

虽然 session 与 cookie 是分开保存的,但是 session 中的数据经过加密处理后默认保存在一个 cookie 中,因此在使用 session 中间件之前必须使用 cookieParser 中间件。
使用了 session-parser 中间件以后,requset.session 上就有了 session 的所有属性。
原生的话是先从 cookie 上取出 sessionid 对应的值,这个值保存在我们后台对象中,作为 key。所有通过对象 obj.key 可以取出它对应的信息。

var session = require('express-session');
app.use(session({options}))
// options 参数的具体取值:

key: 字符串,用于指定用来保存session的cookie名称,默认为coomect.sid.

store: 属性值为一个用来保存session数据的第三方存储对象.

fingerprint: 属性值为一个自定义指纹生成函数.

cookie: 属性值为一个用来指定保存session数据的cookie设置的对象,默认值为{path:/,httpOnly:true,maxAge:14400000}.

path是cookie保存路径.httpOnly是否只针对http保存cookie, maxAge用于指定cookie的过期时间,单位为毫秒.

secret: 字符串.用来对session数据进行加密的字符串.这个属性值为必须指定的属性.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

明明#如月

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

遂心如意

文章 0 评论 0

5513090242

文章 0 评论 0

巷雨优美回忆

文章 0 评论 0

junpengz2000

文章 0 评论 0

13郎

文章 0 评论 0

qq_xU4RDg

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文