最近出了一直在做无聊的管理后台,还抽空做了我公司的计费终端,前端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. iOS内存泄露统计

    1.Value stored to 'xxx' during its initialization is never read // 对象声明之后根本就没有使用 只有赋值 2.Value stored ...

  2. java面试题之----HashMap常见面试题总结

    “你用过HashMap吗?” “什么是HashMap?你为什么用到它?” 几乎每个人都会回答“是的”,然后回答HashMap的一些特性,譬如HashMap可以接受null键值和值,而Hashtable ...

  3. 深入JDK源码,这里总有你不知道的知识点!

    Java的基础知识有很多,但是我认为最基础的知识应该要属jdk的基础代码,jdk的基础代码里面,有分了很多基础模块,其中又属jdk包下面的lang包最为基础. 我们下面将总结和分析一下lang包下面最 ...

  4. 【面试虐菜】—— 常用SQL语句

    创建表 create table emp( id decimal, name ), age decimal) 删除表 DROP TABLE EMP 插入默认值 CREATE TABLE EMP( Id ...

  5. js的作用域与作用域链

    JavaScript的作用域和作用域链.在初学JavaScript时,觉得它就和其他语言没啥区别,尤其是作用域这块,想当然的以为“全局变量就是在整个程序的任何地方都可以访问,也就是写在函数外的变量,局 ...

  6. [原]C++ double 小数精度控制

    第一种方法:cout<<fixed<<setprecision(20)<<mydouble<<endl; #include <iostream&g ...

  7. python入门21 pip安装、更新、卸载第三方包,验证包是否安装成功;pip自身更新升级

    1 安装第三方包 python3自带安装工具pip,且在安装时勾选添加path也会将pip.exe所在目录加入到环境变量(python安装目录\Scripts). 因此安装第三方软件特别简单,打开命令 ...

  8. Jmeter入门2 http请求—简单的get请求

    发送一个简单的get http请求 1 启动Jmeter,在测试计划上点击鼠标右键>添加>Threads(Users)>线程组 2 线程组界面.可设置线程数,几秒启动所有线程,循环次 ...

  9. Android(java)学习笔记24:自定义异常类

    1. 自定义异常: 考试成绩必须在0-100之间 很明显java没有对应的异常,需要我们自己来做一个异常 自定义异常 继承自Exception 继承自RuntimeException 下面是一个代码示 ...

  10. UNIX PIPES 管道原稿

    40年前,Unix操作系统横空出世,Unix不仅仅带来了一个操作系统,还创造C语言,Socket,开源,黑客等等文化,这些文化影响着整个计算机世界的文明,直到今天. 如果说Unix是计算机文明中最伟大 ...