一、cookie

1.设置服务端cookie

response.setHeader("Set-Cookie",["name=val,path=/,max-age=60,httpOnly...","name2=val2,path=/..."]);  --  原生写法
httpOnly:设置服务端的cookie是否能被客户端访问,false表示可以访问,true不能访问

1.安装cookie:npm install cookie -s
2.导入cookie:const cookie = require("cookie")

2.cookie创建

1.客户端
document.cookie = "name=val;path=/;max-age=0...";
document.cookie = "name2=val2";
2.服务端
response.setHeader("Set-Cookie",["name=val;path=/...","name2=val2;httpOnly..."]);
httpOnly:设置cookie是否能被客户端document.cookie获取,true表示只能在服务端使用
response.setHeader("Set-Cookie",[cookie.serialize("name",val,
{
	path:"/",
    httpOnly:false...
}),cookie.serialize()...])

3.cookie获取

1.客户端
document.cookie => name=val; name2=val2; ...
let cookies = Object.assign({},...document.cookie.split("; ").map(v=>{
    let tmp = v.split("=") //[name,val]
    return {
        [tmp[0]]:tmp[1]
    }
}));  //{name:val,name2:val2...}
2.服务端
request.headers.cookie => name=val; name2=val2
//{name:val,name2:val2...}
let cookies = cookie.parse(request.headers.cookie);

4.cookie销毁

1.客户端
document.cookie = "name=;max-age=-1";
2.服务端
response.setHeader("Set-Cookie",["name=;max-age=-1"...]);

5.cookie模块:服务端,将参数序列化成cookie字符串或者将cookie字符串转换为cookie的键值对对象

一、art-template

1.模板遍历:

{{each list}}
	索引:{{$index}} 值:{{$value}}
{{/each}}
{{each list v k}}
	索引:{{k}} 值:{{v}}
{{/each}}

二、Express框架

1.基于Node.js,用于开发Web应用程序的框架

2.特性:1.使用中间件响应HTTP请求

2.定义了路由表用于执行不同的 HTTP 请求动作

3.可以通过向模板传递参数来动态渲染 HTML 页面

4.express-generatorExpress项目生成器,是一个脚手架工具 -- 快速搭建一个基于Express框架的项目框架

express-generator搭建项目

1.$ npx express-generator:直接搭建项目 -- Node.js 8.2+

2.$ npm i express-generator -g:全局安装脚手架工具

$ express:搭建项目

安装依赖

1.进入项目目录

2.$ npm i:安装依赖

运行项目

1.$ npm start:开启项目

2.http://localhost:3000:预览项目

目录结构

bin/www:创建并开启web服务 -- 导入了app.js public:静态资源目录 routes:路由目录 -- ctrl views:模板页目录 -- tpl package.json:项目配置文件 package-lock.json:项目依赖包的版本依赖信息--保证项目中的包版本一致 app.js:入口文件

使用

application应用

1.require("express")()express框架导出一个顶层方法,通过这个方法可以创建一个基于express框架的应用程序 -- application应用

2.app.set(name,value):设置一个全局变量,也可用于设置应用属性,可通过app.get(name)获取

app.set("views",path.join()):设置模板目录 app.set("view engine","jade"):设置模板引擎

3.app.use():挂载中间件到路径上

中间件:是一个方法(函数) function(request,response,next){ request:请求 response:应答 next():继续向下执行 } app.use(path,function1...):将中间件方法挂载到指定的路径上,如果没有path,默认为/,表示所有匹配路径,即所有的请求都会执行function1 内置中间件: 1.express.json():v4.16+ -- 转换提交类型为application/json数据 2.express.urlencoded({ extended: false }): 转换提交类型为application/x-www-form-urlencoded数据 3.express.static(path.join(__dirname, 'public')):托管静态资源 注意:public就是静态资源的目录,模板页中不再需要写入这个目录名

4.app.engine():注册模板引擎

Request对象和Response对象

1.分别表示HTTP的请求及响应

2.Request对象:

request.baseUrl:获取路由当前安装的URL路径 request.cookies:获取cookie request.originalUrl:获取原始请求URL request.hostname / request.ip:获取主机名/IP地址 request.params:获取路由的parameters request.path:请求的路径 request.route:获取当前匹配的路由 request.get():获取指定的HTTP请求头 获取请求数据: request.body:获取请求体 -- post请求数据,默认为undefined,必须通过中间件转换 request.query:获取URL的查询参数串 -- get参数

3.Response对象:

res.append():追加指定HTTP头 res.set()在res.append()后将重置之前设置的头 res.cookie(name,value [,option]):设置Cookie opition: domain / expires / httpOnly / maxAge / path / secure / signed res.clearCookie():清除Cookie res.download():传送指定路径的文件 res.set():设置HTTP头,传入object可以一次设置多个头 res.get():返回指定的HTTP头 res.status():设置HTTP状态码 res.type():设置Content-Type的MIME类型 res.jsonp():传送JSONP响应 res.redirect():设置响应的Location HTTP头,并且设置状态码302 res.send():传送HTTP响应 res.json():传送JSON响应 res.render(view,[locals],callback):渲染一个view,同时向callback传递渲染后的字符串 -- 响应一个模板页 res.sendFile(path [,options] [,fn]):传送指定路径的文件 -会自动根据文件extension设定Content-Type -- 响应一个文件

Router路由

1.一个关于路由和中间件的实例对象 -- 子路由

2.创建:

let express = require("express"); let router = express.Router();  //路由对象

3.router.get/post/put...(path,function):匹配路由为pathget/post/put请求,匹配之后执行function(中间件)

4.router.all():匹配所有的请求类型

5.router.use():挂载中间件

更换模板引擎

1.安装模板引擎:npm i express-art-template -s

2.注册模板引擎:app.engine("后缀",模板引擎)

app.engine("art",require("express-art-template")); app.engine("html",require("express-art-template"));

3.加载模板:

response.render("path/*.art",{name:value...}) response.render("path/*.html",{name:value...})