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拿走
- session定期换id
- 签名
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)
ctx.request:ctx.request.methodctx.request.urlctx.request.header/headersctx.response:ctx.response.body = 'hello';ctx.response.set('a', 12);:设置Header的方法
ctx.response.status = 403;
- 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
- session
缓存
express-static-cache
express.static
koa-static-cache