express 学习笔记分享
首先要知道 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
Property | Type | Description |
---|---|---|
domain | String | 只有访问 domain 对应的域名才会设置 cookie |
expires | Date | 也代表 cookie 的生存期,value 是一个过期时间,比如 new Date(Date.now()+20*1000)}) 不写或者设 0 默认为会话 cookie,存在客户端内存中 |
httpOnly | Boolean | 仅在 http 协议下设定 cookie |
maxAge | String | 设置 cookie 过期时间,倒计时 设置毫秒 |
path | String | 只有访问path对应的路径才会设置 cookie,默认 '/' |
secure | Boolean | 仅在 https 协议下有 cookie |
signed | Boolean | 是否有签名。需要 使用中间件添加秘钥 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 技术交流群。
上一篇: Node 基础学习
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论