美文网首页
thinkjs 简单搭建api服务

thinkjs 简单搭建api服务

作者: wwmin_ | 来源:发表于2018-08-15 23:51 被阅读163次

安装 ThinkJS 命令

$ npm install -g think-cli

安装完成后,系统中会有 thinkjs 命令(可以通过 thinkjs -V 查看 think-cli 的版本号,此版本号非 thinkjs 的版本号)。如果找不到这个命令,请确认环境变量是否正确

创建项目

执行 thinkjs new [project_name] 来创建项目,如:

$ thinkjs new demo;
$ cd demo;
$ npm install; 
$ npm start; 

打开浏览器访问 http://127.0.0.1:8360/,如果是在远程机器上创建的项目,需要把 IP 换成对应的地址。

安装调试工具ndb

npm install -g ndb 

首先要确保你的 Node.js 环境 >= 8.0.0,然后使用 npm install 就可以非常方便的完成安装。由于 ndb 依赖 Puppeteer 安装过程中会去下载 Chromium 所以下载过程可能会有一定的时间,请各位同学耐心等待。如果有碰上权限问题官方提示可以尝试增加 --unsafe-perm=true --allow-root 参数解决。
使用调试工具调试
在vscode命令行工具里输入

ndb npm run

即可打开ndb调试页面

ndb
熟悉chrome dev调试的对此不会陌生
进入页面后在左侧菜单中找到npm scripts菜单,在次菜单下鼠标放到start上后会出现开始三角按钮,点击按钮即运行调试模式.
可以尝试在执行代码中打断点,和chrome dev效果一致.
同时可以修改代码,保存即可同步代码.

开始添加业务逻辑

我们要做一个logger上报和查询的api

  1. 连接mysql
    src->config->adapter.js 文件下修改代码,连接sql字符串
/**
 * model adapter config
 * @type {Object}
 */
exports.model = {
  type: 'mysql',
  common: {
    logConnect: isDev,
    logSql: isDev,
    logger: msg => think.logger.info(msg)
  },
  mysql: {
    handle: mysql,
    database: 'thinkjsplus',
    prefix: '',
    encoding: 'utf8',
    host: '127.0.0.1',
    port: '3306',
    user: 'root',
    password: 'root',
    dateStrings: true
  }
};
  1. 在mysql中新建database 名为thinkjsplus
    创建table,并写入初始数据
-- ----------------------------
-- Table structure for `thinkjsplus_logger`
-- ----------------------------
DROP TABLE IF EXISTS `thinkjsplus_logger`;
-- auto-generated definition
create table thinkjsplus_logger
(
  id   int auto_increment,
  user varchar(100) null
  comment '用户信息',
  port varchar(200) null
  comment '端口信息',
  info varchar(500) null
  comment 'log 信息',
  time datetime     not null
  comment '上报时间',
  constraint thinkjsplus_logger_id_uindex
  unique (id)
)
  comment 'web error logger';

alter table thinkjsplus_logger
  add primary key (id);


-- ----------------------------
-- Records of thinkjsplus_logger
-- ----------------------------
INSERT INTO `thinkjsplus_logger` VALUES ('admin', 'localhost','test');
INSERT INTO `thinkjsplus_logger` VALUES ('user1', 'www.example','test');

创建 Controller

使用命令

thinkjs controller logger

之后再src/controller文件夹下会生成logger.js文件,我们的逻辑就写在这里面

const Base = require('./base.js');
const moment = require('moment');//引用了moment库,需要安装npm install --save moment

module.exports = class extends Base {
  async listAction() {
    if (this.isPost) {
      let data = await this.model('thinkjsplus_logger').select();
      return this.success(data);
    } else {
      return this.json(null);
    }
  }

  async addAction() {
    let data = this.post();
    data.time = moment(new Date()).format('YYYY-MM-DD HH:mm:ss');
    if (think.isEmpty(data.id)) {
     
      let res=null;
      try {
         //保存
        res = await this.model('thinkjsplus_logger').add(data).catch(err => {
          return think.isError(err) ? err : new Error(err);
        });
      } catch (e) {
        return this.fail(1000, e);
      }

      if (think.isError(res)) {
        return this.fail(1000, res.message);
      }
      if (res) {
        this.success(true);
      } else {
        this.success(true);
      }
    } else {
      //更新
      let res = await this.model('thinkjsplus_logger').update(data);
      if (res) {
        this.success(true);
      } else {
        this.success(true);
      }
    }
  }
};

请求测试

  1. 使用postman发送添加请求
// url server为全局变量 http://localhost:8360/
{{server}}logger/add
//body json
{
    "user":"wwmin",
    "port":"localhost",
    "info":"test"
}

在ndb的listAction中打断点进行调试,一切顺利就会看到返回结果为true

  1. 使用postman发送查询请求
// url server为全局变量 http://localhost:8360/
{{server}}logger/list

请求方式为post,但是没有参数
在ndb的listAction中打断点进行调试,一切顺利就会看到返回结果为 list 对象.
说明接口调试完成.

终于将thinkjs跑通了接口api,为以后的搭建后台api铺平了道路,当然里面还有许多没考虑到的地方,比如 权限验证,service服务,model,middleware,logic,extend等方面都没有涉及,在这之后会进一步研究,并将此文继续补充完整.

相关文章

网友评论

      本文标题:thinkjs 简单搭建api服务

      本文链接:https://www.haomeiwen.com/subject/tavgbftx.html