Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

express 学习 #5

Open
sunyongjian opened this issue Nov 30, 2016 · 0 comments
Open

express 学习 #5

sunyongjian opened this issue Nov 30, 2016 · 0 comments
Labels

Comments

@sunyongjian
Copy link
Owner

sunyongjian commented Nov 30, 2016

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())
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数据进行加密的字符串.这个属性值为必须指定的属性.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant