Koa router 写api的时无法在同一个class中调用方法

发布于 2022-09-11 20:50:29 字数 2474 浏览 16 评论 0

最近在学习react和nodejs的交互,在写一个新增接口时,需要在class中用A方法调用B方法,但一直报错SyntaxError: Unexpected identifier

具体报错贴在下方代码中了:

const mysql = require("../../config/mysql");
const uuidv4 = require("uuid/v4");

class goodsController {
  static async addGoods(ctx, next) {
    let body = ctx.request.body;
    let responseBody = {};
    return new Promise((resolve, reject) => {
      for (let i in body) {
        if (body[i] === "") {
          Object.assign(responseBody, {
            apiStatus: 500,
            sysStatus: 0,
            info: "新增失败,参数不能为空"
          });
          ctx.body = responseBody;
          reject();
        }
      }
      console.log(this);
      // 这一步调用的时候控制台一直提示
      // SyntaxError: Unexpected token this
      // 是因为在koa-router中写class无法识别this吗?
      let brandList = await this.getBrandTitle(body.brandId);
      console.log(brandList);
      let brandTitle = "";
      if (brandList.length > 0) {
        brandTitle = brandList[0].title;
      }
      let id = uuidv4();
      // 将生成的id及查询到的brandTitle赋值进body中
      Object.assign(body, {
        id,
        brandTitle
      });
      let sql =
        "INSERT INTO goods(id, name, brandTitle, brandId, marketPrice, sellingPrice) VALUES(?,?,?,?,?,?)";
      let params = [
        body.id,
        body.name,
        body.brandTitle,
        body.brandId,
        body.marketPrice,
        body.sellingPrice
      ];
      mysql.query(sql, params, (err, res, field) => {
        if (err) {
          throw err;
        }
        if (res.length > 0) {
          console.log(res);
          Object.assign(responseBody, {
            apiStatus: 0,
            sysStatus: 0,
            info: "新增商品成功"
          });
          ctx.body = responseBody;
          resolve();
        } else {
          Object.assign(responseBody, {
            apiStatus: 500,
            sysStatus: 0,
            info: "新增商品失败,插入数据库失败"
          });
          ctx.body = responseBody;
          reject();
        }
      });
    });
  }

  getBrandTitle(brandId) {
    return new Promise((resolve, reject) => {
      let sql = "SELECT * FROM goods_brand WHERE id=?";
      mysql.query(sql, brandId, (err, res, field) => {
        if (err) {
          reject(err);
          throw err;
        }
        if (res.length > 0) {
          resolve(res);
        } else {
          reject([]);
        }
      });
    });
  }
}

module.exports = goodsController;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

情话难免假 2022-09-18 20:50:29

这里有两个问题, 首先 addGoods 静态方法这里有问题

    static async addGoods(ctx, next) {
        return new Promise((resolve, reject) => {
            await this.getBrandTitle(body.brandId);
        })
    }   
    

async 与 await 必须成对(同一个函数), 修改如下

    static async addGoods(ctx, next) {
        return new Promise(async (resolve, reject) => {
            await this.getBrandTitle(body.brandId);
        })
    }   

另外一个问题是addGoods静态方法 是不能调用实例方法, 要么全部修改静态方法,要么改为实例方法

    await this.getBrandTitle(body.brandId);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文