express 学习
sunyongjian opened this issue · 0 comments
sunyongjian commented
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数据进行加密的字符串.这个属性值为必须指定的属性.