最近出了一直在做无聊的管理后台,还抽空做了我公司的计费终端,前端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 ,重新起一边文章吧,写在这里好像不太合适了。

node 写api几个简单的问题的更多相关文章

  1. nodejs+express+mongodb写api接口的简单尝试

    1:启动mongodb服务 我的mongoDB的安装目录:E:\mongoDB\bin,版本:3.4.9 打开cmd  -> e:(进入e盘) -> cd mongoDB/bin(进入mo ...

  2. Node.js API 初解读(一)

    Node.JS API 初解读 Version: NodeJs v6.2.0 一. Assert 1.简介 Assert模块主要用于断言.如果表达式不符合预期,就抛出一个错误. 该模块用于编写程序的单 ...

  3. Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例

    目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装项目其它需要包 清除冗余文件并重新规划项目目录 配置文件 规划示例路由,并新建相关文件 实现数据访问和业务逻辑相关方法 编写mys ...

  4. [转]Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例

    本文转自:https://www.cnblogs.com/zhongweiv/p/nodejs_koa2_webapp.html 目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装 ...

  5. Nodejs学习笔记(十五)—Node.js + Koa2 构建网站简单示例

    前言 前面一有写到一篇Node.js+Express构建网站简单示例:http://www.cnblogs.com/zhongweiv/p/nodejs_express_webapp.html 这篇还 ...

  6. 实现node端渲染图表的简单方案

    实现node端渲染图表的简单方案 这个题目有点小,本篇博客真正谈论的应该是服务端生成图表的简单方案,这里面有两个关键字:服务端 & 简单,我们知道基于js有很多的图表库,知名的如D3.echa ...

  7. node.js(API解读) - process (http://snoopyxdy.blog.163.com/blog/static/60117440201192841649337/)

    node.js(API解读) - process 2011-10-28 17:05:34|  分类: node |  标签:nodejs  nodejsprocess  node.jsprocess  ...

  8. Node教程——API接口开发(MangoDB+Express)

    一.大纲 大纲: 关于架构, 首先我们的有一个app.js这个就是根路由起点,用来最初的打入口 它的功能有: 1.1 引入模块创建基础的网站服务器, 1.2 导入bodyPasser,过滤还有处理我们 ...

  9. Node.js API

    Node.js v4.4.7 Documentation(官方文档) Buffer Prior to the introduction of TypedArray in ECMAScript 2015 ...

随机推荐

  1. Eclipse Common API

    Platform runtime Defines the extension point and plug-in model. It dynamically discovers plug-ins an ...

  2. SELECT s.* FROM person p INNER JOIN shirt s ON s.owner = p.id WHERE p.name LIKE 'Lilliana%' AND s.color <> 'white';

    SELECT s.* FROM person p INNER JOIN shirt sON s.owner = p.idWHERE p.name LIKE 'Lilliana%'AND s.color ...

  3. 多线程(八)~ThreadLocal、InheritableThreadLocal的使用

    通过前面的学习,我们了解了在多线程+成员变量等情况下会出现线程安全的问题.那么解决线程安全问题除了使用synchronize关键字之外,还有另一种常用的解决思路,那就是使用ThreadLocal类,下 ...

  4. 导出word的另类做法

    一.背景 项目中经常有导出word的功能,一般用poi来做,但在要求外观较高的情况下,用poi来做基本不能满足需求 而事实上word除了我们一般使用的模式外,还存在xml.与html模式(你没看错,右 ...

  5. 一个自动生成awr报告的shell脚本

    最近在学习shell编程,搞一点点小工具自动完成awr报告的收集工作,方便系统出现问题时问题排查.脚本内容如下,系统收集每天开始时间6点结束时间20点的awr报告并存储在/u01/shell_t/aw ...

  6. 观察者模式在One Order回调函数中的应用

    例如需求是搞清楚function module CRM_PRODUCT_I_A_CHANGE_ORGM_EC在什么样的场景下会被调用.当然最费时间的做法是设一个断点,然后跑对应的场景,观察断点何时被触 ...

  7. 设计模式——观察者模式(ObserverPattern)

    观察者模式(ObserverPattern):观察者模式又称发布-订阅(Publish/Subscribe)模式,定义了一个中一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状 ...

  8. IOS开发之——画图(CGContext)

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/zhenyu5211314/article/details/24230581 0  CGContext ...

  9. ms17_010利用复现(32位)

    准备阶段: 1,原版windows7:cn_windows_7_enterprise_x86_dvd_x15-70737.iso 2,kali系统,  虚拟机 3,用于32位机的攻击模块:Eterna ...

  10. @WebListener 注解方式实现监听(eclipse和idea)

    eclipse进行演示: 1.创建 Dynamic Web Project ,Dynamic Web module version选择3.0 2.在自动生成 的web.xml配置,增加 metadat ...