小白菜的博客

一个具有程序员所有缺点的程序员的博客

express基础复习(node.js版)

第一部分,express基础

1,express入门

node.js项目中安装express

npm install express
1.1 配置express设置

    express可以使用set(setting,value),enable(setting)和disable(setting)方法来配置

    下面是可以配置的变量:

    env,  trust proxy ,jsonp callback name, json replacer,json spaces, case sensitive routing,strict routing, view cache,view engine, views,

1.2 启动express服务器
var express = require('express');
var app = express();
app.listen(80);

2,配置路由

2.1 实现路由

语法:

app.<method>(path,[callback...],callback)

例子:

app.get('/',function(req,res){
    res.send("Server Root");
});
app.post('/',function(req,res){
    res.send("Save Page");
});
2.2 在路由中应用参数

使用查询字符串,使用POST参数  使用正则表达式  使用定义的参数,

使用查询字符串:

var express = require("express");
var url  = require('url');
var app = express();
app.get('/find',function(req,res){
	var url_parts = url.parse(req.url,true);
	var query = url_parse(req.url,true);
	res.send('Finding Book:Author:' + query.author + 'Title: ' + query.title);
});

使用正则表达式应用路由参数

app.get(/^\/book\/(\w+)\:(\w+)?$/.function(req,res){
	res.send('Get Book:Chapter: ' + req.params[0] + 'Page: ' +req.params[1]);
});

使用已定义的参数来应用路由参数

app.get('/user/:userid',function(req,res){
	res.send("Get User: " + req.param("userid"));
});

为已定义的参数应用回调函数

app.apram('userid',function(req,res,next,value){
	console.log("Request with userid: " + value);
	next();
});

3,使用Request对象

HTTPRequest对象的属性和方法如下:

originalUrl,protocol,ip,path,host,method,query,fresh,stale,secure,acceptsCharset(charset),get(header),headers。

4,使用Response对象

4.1 设置标头

相关方法如下:

get(header),set(header,value),set(headerObj),location(path),type(type_string),attachment([filepath])

4.2 设置状态

  res.status(xxx);

4.3 发送响应

    res.send(status,[body])

    res.send([body])

4.4 发送JSON响应

    res.json(status,[object])

    res.json([body])

    res.jsonp(status,[object])

    res.jsonp([object])

4.5 发送文件
res.sendfile('arch.jpg',
				{maxAge:1,//24*60*60*1000,
				root:'./views/'},
			);
4.6 发送下载响应

    res.download(path,[filename],[callback])

4.7 重定向响应

    res.redirect('/重定向地址')

5,实现一个模板引擎

var app = express();
app.set('views','./views');
app.set('view engine','jade')
app.engine('ejs',require('ejs').__express);
app.engine('html',require('ejs').renderFile);

第二部分 express应用

1,了解中间件

    express支持的中间件组件如下:

  • static:允许express服务器以流式处理静态文件的GET请求。这个中间件是Express内置的,它可以通过express.static()访问。
  • express-logger:实现一个格式化的请求记录器来跟踪对服务器的请求
  • basic-auth-connect:提供对基本的HTTP身份验证的支持。
  • cookie-parser:你可以从请求读取cookie并在响应中设置cookie
  • cookie-session:提供基于cookie的会话支持
  • express-session:提供了一个相当强大的会话实现
  • body-parser:把POST请求正文中的JSON数据解析为req.body属性
  • compression:对发给客户端的大响应提供Gzip压缩支持
  • csurf:提供跨站点请求伪造保护。
1.1 在全局范围内把中间件分配给某个路径
app.use('/',bodyParser());
1.2 把中间件分配到单个路由
app.get('./otherRoute',bodyParser(),function(req,res){
	res.send('This request was not logged.');
});
1.3 添加多个中间件函数
var express = require("express");
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
var session = require('express-session');
var app = express();
app.use('/',bodyParser());
app.use('/',cookieParser());
app.use('/',session());

2,使用query中间件

var express = require('express');
var app = express();
app.get('/',function(req,res){
	var id = req.query.id;
	var score = req.query.score;
	console.log(JSON.stringify(req.query));
	res.send("done");
});

3,提供静态文件服务

语法

express.static(path,[options]);

path参数指定路径,options中的可选项又 maxAge  hidden  redirect  index

4,处理POST正文数据

app.post('/',function(req,res){
});

5,发送和接收cookie

cookie-parser中间件语法:

express.cookie-parser([secret])

在响应中设置cookie:

res.cookie(name,value,[options])

options中的属性: maxAge httpOnly  signed  path

代码例子

var express = require("express");
var cookieParser = require('cookie-parser');
var app = express();
app.use(cookieParser());
app.get('/',function(req,res){
	console.log(req.cookies);
	if(!req.cookies.hasVisited){
		res.cookie('hasVisited','1',
				{maxAge:60*60*1000,
				 httpOnly:true,
				path:'/'});
	}
	res.send("Sending Cookie");
});
app.listen(80);

6,实现会话

    使用cookie-session  注意cookie-session在底层利用cookie-parser中间件,所以你需要先添加cookie-parser中间件

语法:   res.cookie([options])

options参数可以设置的属性: key  secret  cookie  proxy

7,应用基本的HTTP身份验证

    为网站在全局范围内实现基本的HTTP身份验证

var express = require('express');
var basicAuth = require('basic-auth-connect');
var app = express();
app.listen(80);
app.use(basicAuth(function(user,pass){
	return(user === 'testuser' && pass === 'test');
}));

    为一个单独的路由实现基本的HTTP身份验证

var express = require('express');
var basicAuth = require('basic-auth-connect');
var app = express();
app.listen(80);
var auth = basicAuth(function(user,pass){
	return(user === 'testuser' && pass === 'test');
});
app.get('/restricted',auth,function(req,res){
	res.send('Welcome to the restricted section.');
});

8 实现会话身份验证

    基本HTTP身份验证的一个主要缺点是,只要整数被存储,登录就一直存在,这不是很安全。一个更好的方法是,实现自己的身份验证机制,并将其存储在一个你可以随时使之过期的会话中。

    express内的session中间件对于实现会话的验证效果都非常好。session中间件附加了一个Session对象req.session到Request对象来提供会话功能。req.session对象上有如下所示的方法

  • regenerate([callback]):移除并创建一个新的req.session对象,让你重置会话
  • destroy([callback]):移除req.session对象
  • save([callback]):保存会话数据
  • touch([callback]):为会话cookie重置maxAge计数
  • cookie:指定把会话链接到浏览器的cookie对象
阅读更多
版权声明: https://blog.csdn.net/qq_39263663/article/details/80691315
个人分类: node.js javascript
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭