zoukankan      html  css  js  c++  java
  • node 写api几个简单的问题

    最近出了一直在做无聊的管理后台,还抽空做了我公司的计费终端,前端vue,后端node,代码层面没啥太多的东西。由于自己node版本是8.0.0,node自身是不支持import和export的,要想基于它们实现模块加载,一种方式就是利用babel,另一种方式使用ts.当然可能还有别的方式,我暂时就想到这两种。不过时间比较紧,我ts的水平还没过实践。为了保险,还是直接配置babel 

    {
      "presets": ["stage-3"],
      "plugins": [
          "transform-async-to-generator",
          "transform-es2015-modules-commonjs",
          "transform-export-extensions",
          "babel-plugin-transform-es2015-classes"
      ]
    }

    .babelrc 文件如上。在对应下载 这几个依赖,在app.js 入口  require('babel-core/register'); 就可以愉快的使用import和export

    因为基础的代码是采用es6的class,我总结的几个关键点其实也没几个,说几个个人认为比较重要的:

    1:基于symbol实现的私有方法,不解释了。

    const getDevId = Symbol('DevId');
    class () {
          async [getDevId] (carPlate) {
            try {
                let resCarVin = await carVinModel({ carPlate });
                let resDevId = await devIdModel({ resCarVin: resCarVin[0].car_vin });
                this.devId = resDevId[0].dev_id
            } catch (error) {
                throw new Error(error);
            }
        }
    }

    2: 上下文的绑定

    虽然我们的controller都是基于class,但事实上我们export 的是这个class 的实例,路由部分引入的是这个实例的某个方法,但是问题就是在这个地方,如果引入实例的方法,还存在实例属性或者其他的实例方法,这个时候如果不绑定上下文,会发生错误

    具体代码如下

    class {
    async carGPS (req, res, next) {
            let { carPlate, starttime, endtime } = req.query;
            try {
                if (!this.devId) {
                    await this[getDevId](carPlate);
                }
                let response = await carGPSModel({ resDevId: this.devId, starttime, endtime });
            } catch (error) {
                console.log(error);
                });
            }
        }
    }

    代码大体就这样,如果在别的文件通过类的实例调用这个方法,如果不绑定这个方法的上下文可能会出错的   解决方法其实很简单,如果写react的话可能对这种方式很清楚,就是在class 的contructor中this.carGps = this.carGps.bind(this)

    3.万年的跨域问题

    app.all('*', (req, res, next) => {
        res.header("Access-Control-Allow-Origin", req.headers.Origin || req.headers.origin);
        res.header("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Requested-With");
        res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
          res.header("Access-Control-Allow-Credentials", true); //可以带cookies
        if (req.method == 'OPTIONS') {
              res.sendStatus(200);
        } else {
            next();
        }
    });

    大概就这么几个简单问题,其他就是业务问题,不过发现自己的sql好差呀!!! 其实自己做的这个东西最大的收获不是代码层面的,而是关于部署层面的。docker哈 pm2啊 nginx的proxy_pass啦 gzip ,重新起一边文章吧,写在这里好像不太合适了。

    他山之石,可以攻玉
  • 相关阅读:
    读《构建之法》第一,二,十六章的奇思妙想
    四则运算
    鉴权
    sql注入
    【信息安全作业5】散列函数的应用及其安全性
    结对作业 -GUI四则运算
    阅读《构建之法》四章、十七章
    2016012064+小学四则运算练习软件项目报告
    简单四则运算一
    梦想开花的地方
  • 原文地址:https://www.cnblogs.com/webDojo/p/9398817.html
Copyright © 2011-2022 走看看