sunyongjian / blog

个人博客😝😋😄
664 stars 54 forks source link

express 学习 #5

Open sunyongjian opened 8 years ago

sunyongjian commented 8 years ago

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.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()**  设置响应头
```javascript
    res.set('Content-Type', 'text/plain');

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

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上

中间件

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数据进行加密的字符串.这个属性值为必须指定的属性.