zoukankan      html  css  js  c++  java
  • egg.js的第一个坑——post请求的正确姿势

    为了学习egg框架是如何接受常见的http请求,以及如何返回数据,我特意写了个form的demo

    <!--  view/hello.ejs -->
    <form action="/form" method="post">
      <input type="text" name="name" placeholder="name">
      <input type="text" name="age" placeholder="age">
      <input type="submit" value="提交">
    </form>
    // router.js
    
    'use strict';
    
    module.exports = app => {
      app.get('/', 'render.ejs');
      app.post('/form',app.controller.form.listPosts)
    };
    // controller/form.js
    const Controller = require('egg').Controller; module.exports = class PostController extends Controller { * listPosts() { this.ctx.body = { name: this.ctx.request.body.name, age: this.ctx.request.body.age } } };
    <h3>name: <%=name%></h3>
    <h3>age: <%= age %></h3>

    然后我就直接开始试验了,结果一直报错,403,说是什么安全验证什么鬼的,后面我详细去看官方文档,看到了这样一句话

    附:
    这里直接发起 POST 请求会报错:'secret is missing'。错误信息来自 koa-csrf/index.js#L69 。

    后面详细的看完才知道,原来是egg框架的这个内置安全插件搞的鬼。简单的说吧,这个插件的功能就是在你每次post请求进来的时候,会先检查你 请求自带的参数里面带不带一个特定的参数,这个参数就相当于一个秘钥,它存在于你请求的cookie中,你请求的时候需要带上一个特定参数名,并且参数值等于这个秘钥的数据,也可以直接放在请求头header里面,看文档去设置就好。

    再说明白一点,你请求的时候,服务器会问你“天王盖地虎”,你必须回答“小鸡炖蘑菇”,一个道理,只不过这个 “小鸡炖蘑菇” 口令是存在于你请求的cookie里面的,你需要做的就是从cookie中拿出来,然后放到header里面或者直接加到你请求的参数里面 https://eggjs.org/zh-cn/core/security.html#安全威胁-csrf-的防范

    总的来说,个人感觉阿里的这个框架还是非常牛逼的,至少安全方面做得非常好,值得去深入的学习一下。

  • 相关阅读:
    C++STL中的unique函数解析
    STL中erase()的用法
    刷题技巧——简易哈希表的实现
    经典面试题目——找到第n个丑数(参考《剑指offer(第二版)》面试题49)
    C++中sort函数小结
    谈谈交叉验证法(个人小结)
    数字序列中某一位数字(《剑指offer》面试题44)
    求1~n整数中1出现的次数(《剑指offer》面试题43)
    2018年美团春招(第二批)题解
    C/C++中字符串和数字互转小结
  • 原文地址:https://www.cnblogs.com/sizhou/p/7282502.html
Copyright © 2011-2022 走看看