express (非破坏式框架,不影响node原生方法的使用)
//安装
cnpm init
cnpm i express -D
//使用
const express = require('express');
let server= express();
server.listen(8087);
//此时方法有get\post\use(get\post方法都认可,也可以用来使用中间件)
server.get('/a',function (req,res){
console.log('aaaaa');
//express是一个非破坏式的框架,node原生方法几乎都可以用
res.write('NB');
res.end();
//res.send(any),可以发送任意的参数,数组,json等
//express的方法,不需要使用res.end().
res.send('[1,2,5,3]');//send可以发送数组 json等.而原生的不支持
})
//express中间件(插件) 使用use();
//静态文件,访问的文件会自动去www/文件夹下找.
//例:localhost:8087/1.html;该中间件会自动去www/文件夹下寻找1.html并按照gzib格式返回,
server.use(express.static('www/'));
//express流水线
//流水线工作,利用next()让/a的访问执行到第二次的使用中;如果不使用next()就会只执行第一次;
server.get('/a',function (req,res,next){
console.log('aaaaa');
next();
})
server.get('/a',function (req,res){
console.log('bbbbbb');
})
//express解析绝对路径,pathlib.resolve获取绝对路径
//res.sendFile(绝对路径)
let pathlib = require('path');
server.get('/a',function (req,res){
res.sendFile(pathlib.resolve('a.txt'));
})
//express返回状态码
res.sendStatus(404);
//express重定向
res.redirect('https://www.baidu.com');
//express 数据交互
//get数据,使用req.query
server.get('/a',function (req,res){
console.log(req.query);//req.query就是处理好的get数据
})
//普通post数据,使用中间件body-parser
//安装cnpm i body-parser -D
const body = require('body-parser');
//使用body-parser;
server.use(body.urlencoded({extended:false}));//extended扩展识别模式为flase
server.post('/a',function (req,res){
console.log(req.body);//req.body是body-parser中间件解析得到的;
})
//文件post数据,使用中间件multer
//安装cnpm i multer -D
const multer = require('multer');
let multerObj = multer({dest:'./file/'});//文件接收后放置的路径
server.use(multerObj.any());//将multer加到服务器上,any()声明允许接收所有文件
server.post('/a',function (req,res){
console.log(req.files); //文件POST数据multer带来的files
})
//express中间件原理(详见server6-3.js)
//因代码执行顺序是自上而下流水线式执行;
//写一个函数,使用原生的node代码去处理数据
//创建新的JS文件,使用
module.exports = (req,res,next)=>{
req.body={a:12,b:5};//真实场景,此处需要使用原生的node代码去处理数据;
next();
};//将此函数抛出;
//在主服务器文件中引入上一步新建的文件;let body = require('./xxx.js');
//调用server.use(body);即可实现自定义的中间件
//部分代码-------
server.use((req,res,next)=>{
req.body={a:12,b:5};//真实场景,此处需要使用原生的node代码去处理数据;
next();
})
server.post('/a',function (req,res){
console.log(req.body);//req.body即上面代码添加的,上面的代码被称为中间件
})
//cookie与session(中间件)
//cookie 存在浏览器;容量有限--4k;安全性低;
//session 存在服务器;容量极大;安全性高;
//服务器发送带有sessionID的cookie给浏览器,以便用来识别身份
//安装 cookie-parser 与 cookie-session;
cnpm i cookie-parser cookie-session -D
//使用cookie-parser
const cookieParser = require('cookie-parser');
server.use(cookieParser('myKey'));//myKey是自己设置的防伪签名,任意的字符串
server.get('/a',function(req,res){
consloe.log(req.cookies);//此处输出全部的浏览器cookies,不包括带签名的cookie
consloe.log(req.signedCookies);//此处输出带签名的cookie
res.cookie('b',5,{});//此处设置一个普通cookies;
res.cookie('c',51,{signed:true});//此处设置一个签名cookies;
})
//使用cookie-session
const cookieSession = require('cookie-session');
server.use(cookieSession({
keys:['aaa','bbb''ccc'],//可以给多个秘钥
//secret:'xxx',//也可以设置单独的秘钥
}));
server.get('/a',function(req,res){
//req.session是个对象
if(!req.session['count']){
req.session.count=1;
}else{
req.session.count++;
}
res.send(req.session.count);//可以记录登陆次数
})
网友评论