写点什么

nodejs 学习记录

用户头像
关注
发布于: 2021 年 06 月 24 日
1.req 常用属性
  1. 获取请求方法类型:method

  2. 路径解析:npm i -S url

req.url = '/ddddd?a=000000'const { pathname, query } = url.parse(req.url, true);
复制代码

3.返回相应的文件

// __dirname:当前文件夹的绝对地址,path.join:返回合并的路径const getFile = (fileName, res) => {    fs.readFile(path.join(__dirname, fileName), (err, buffer) => {        if (err) {            res.writeHead(404);            res.end('error');        };        res.writeHead(200);        res.end(buffer);    });};
复制代码

4.设置 cookie

res.setHeader('Cache-Control',  'max-age=' +time )  多久之后过期HttpOnly:不允许浏览器修改Secure:https中才传输cookieexpires设置过期时间例子:Cookie: Hm_lvt_f85e04393eda9ae01f4abaca115ecece=1620900436; [object Object]; a=333
复制代码
2.设置缓存的四种方式

注意:直接在浏览器中输入地址,在 req 中浏览器会强制设置 max-age=0,无法缓存当前请求的支援,请求的资源是在入口文件下,加载的资源,才会进行缓存策略

  1. Last-Modified:最后一次修改文件的时间(协商缓存)

存在以下弊端:

  1. 文件改动时间戳不一定改

  2. 时间戳只能精确到秒

fs.stat(fileName, (err, stat) {  const time = stat.mtime.toUTCString()  if(time === req.headers['if-modified-since']){    res.writeHead(304)    res.end()  }else {    res.writeHead(200, {      'Last-Modified': time    })    res.end('harttle.land')  }})
复制代码

2.Etag:在分布式的时候处理不好(协商缓存)

  if(req.headers['if-none-match']) {    res.statusCode = 304    res.end()  }else {    res.setHeader('Etag', '散列值')    res.end(file)  }
复制代码

3.Expires:设置过期时间: 与客户端时间出现差异(强缓存)

res.setHeader('Expires', (new Date() + day).toGMTString())
复制代码

4.Cache-Control

res.setHeader('Cache-Control', 'public, max-age=86400')
复制代码

5.发布时清缓存:文件后面带上 hash 栗子:(vendor.ec18320f.js)

3.数据上传
  1. 表单提交:Content-Type:application/x-www-form-urlencoded

  2. 提交附件:Content-Type:multipart/form-data

const { IncomingForm } = require('formidable');/** * @description: 上传附件 * @param {*} req * @param {keepExtensions} 是否包含原始文件的扩展名 * @return {maxFileSize} 文件大小限制 */const fileUpload = (req, res) => {    const form = new IncomingForm({        uploadDir: './src/img',        keepExtensions: true,        maxFileSize: 1024 * 1024 * 2,    });    form.parse(req, function (err, fields, files) {        if (err) {            console.log(err);            return new Error(err);        }        console.log(files);        res.writeHead(200);        res.end();    })};
复制代码
4.数据上传与安全
  1. 限制上传 json 和 xml 的 content-length 的字节长度,超过长度停止解析,res.destroy()触发 end

  2. CSRF 通过表单上传,跨站攻击,通过 cookie:添加随机串,感觉比较鸡肋

5.使用 mongodb
  1. 下载安装:https://www.mongodb.org.cn/drivers/5.html

  2. 配置环境变量

  3. 常用操作

1.net start/stop mongodb  // 开启停止数据库2.show dbs  // 查看数据库3.use [dbname] // 创建使用数据库4.show tables // 查看数据库下面的表5.db // 查看当前操作的数据库6.db.createCollection('name')  // 创建表格7.db.dropDatabase() // 删除当前数据库8.db.表.drop()// 删除表格
复制代码

4.使用 nodeCURD

const data = [{"name":'zhangsan',"age":21},{"name":'lisi',"age":22}];collection.insert(data, function(err, result) { })whereStr = {"name":'wilson001'};collection.remove(whereStr, function(err, result) {})// 查询到的数据转换成数组 collection.find(whereStr).toArray(function(err, result) {})// $set修改,$unset,删除键值对, $inc对数字进行运算, $gt大于符号const whereStr = {"name":'zhangsan'};const updateStr = {$set: { "age" : 100 }};collection.updateOne(whereStr, updateStr, function(err, result) {})
复制代码
6.中间件
发布于: 2021 年 06 月 24 日阅读数: 5
用户头像

关注

还未添加个人签名 2020.08.05 加入

还未添加个人简介

评论

发布
暂无评论
nodejs学习记录