初步认识Express/EJS/Koa/Pug

260 阅读2分钟

Express

  • res.send(a Buffer object, a String, an object, Boolean, or an Array);
res.send(Buffer.from('whoop'))
res.send({ some: 'json' })
res.send('<p>some html</p>')
res.status(404).send('Sorry, we cannot find that!')
res.status(500).send({ error: 'something blew up' })
  • res.sendFile(绝对路径文件名);

res.sendFile(pathlib.resolve('a.txt'));server.use(express.static('文件名/'));不一样,sendFile更灵活但也更麻烦。

  • res.sendStatus(状态码);

res.writeHeader()+res.write()+res.end()

  • res.redirect('路径');

res.redirect('http://www.baidu.com');

数据交互

GET

req.query

POST

  • 普通POST

body-parser

server.use(bodyParser.urlencoded({
    extended: false
}));
  • 文件POST

multer

Multer 是一个 node.js 中间件,用于处理 multipart/form-data 类型的表单数据,它主要用于上传文件。Multer 不会处理任何非 multipart/form-data 类型的表单数据。

Multer 会添加一个 body 对象 以及 file 或 files 对象 到 express 的 request 对象中。 body 对象包含表单的文本域信息,file 或 files 对象包含对象表单上传的文件信息。

server.use(multer({
    dest: 'upload/'
}).any());
server.use(multer({
    dest: 'upload/'
}).single('f1'));

req.body req.files


cookie

  • 存在浏览器里
  • 容量有限--4k
  • 不安全--对用户&浏览器 防止篡改 加密(cookie不行)

server.use(cookieParser([secret],{}));

req.cookies接收 req.signedCookies接收带签名的

res.cookie(name, val, options);发送

session

  • 存在服务器里
  • 容量无限(不用担心
  • 安全
cookie-session
session劫持

sess_id拿走

  1. session定期换id
  2. 签名
server.use(cookieSession({
// keys or secret 
keys: ['abkjshdf', 'ljshduecndj', 'ekdsjfhsi'],
// secret: 'xxx'
}));

req.seesion

router

  • 创建

let userRouter = express.Router();

  • 给路由填东西

router.get('地址',()=>{}); router.post('地址',()=>{}); router.use('地址',()=>{});

router.get('/', function(req, res) {
  res.send('首页');
});

router.get('/about', function(req, res) {
  res.send('关于');
});
  • 添加到父级

server.use('路径', router); parentRouter.use('路径', router);


pug(了解)

破坏式:破坏html

  • 以缩进来规定层级

ejs

非破坏式

  • 转义输出 <%=str%>
  • 非转义输出 <%-str%>

koa(破坏式)

  • 异步操作更简单
  • (req, res, next)->(ctx, next)
  1. ctx.request: ctx.request.method ctx.request.url ctx.request.header/headers
  2. ctx.response: ctx.response.body = 'hello'; ctx.response.set('a', 12);:设置Header的方法

image.png

ctx.response.status = 403;

image.png

  • koa强依赖router

const router = require('koa-router');

let r1 = router(); server.use(r1.routes());

r1.get('/xxx', async); r1.post('/xxx', async); r1.use('/xxx', async); r1.put('/xxx', async); ...

  • 静态资源

koa-static koa-static-cache: server.use(staticCache('路径'));

  • 请求数据

GET ctx.request.query 路由参数:ctx.params POST/文件

const koa = require('koa');
const betterBody = require('better-body');
const pathlib = require('path');
const convert = require('koa-convert');

let server = new koa();
server.listen(8080);

server.use(convert(betterBody({
    // 绝对路径
    uploadDir: pathlib.resolve('./路径'),
    keepExtentions: bool
})));

ctx.request.fields 数据+文件信息 ctx.request.files 更为全面的文件信息(没什么用)

  • cookie (koa自带cookie)

ctx.cookies.get(name); ctx.cookies.set(name, val, options);

options: maxAge 以毫秒为单位的时间 expires Date对象 path domain

image.png

  • session

缓存

express-static-cache express.static koa-static-cache