метод суперкласса не распознается в наследовании NodeJS - PullRequest
0 голосов
/ 22 апреля 2020

Я реализую шаблон проектирования стратегии в приложении nodeJS. У меня есть базовый класс Options и производный класс accessToken. Предполагается, что производный класс accessToken имеет приоритет над некоторыми настройками параметров, такими как тело или URL-адрес HTTP-запроса. Однако при попытке запустить мое приложение создается впечатление, что расширенные методы производного класса (в частности, updateOptions ()) не распознаются. приложение работающего узла. js выдает следующую ошибку:

UnhandledPromiseRejectionWarning: TypeError: accessObject.updateOptions не является функцией в app.get (/Users/jorgevasquez/myProjects/myProjects/WebDev/teslaProject/app.js: 31: 16) в Layer.handle [как handle_request] (/Users/jorgevasquez/myProjects/myProjects/WebDev/teslaProject/node_modules/express/lib/router/layer.js:95:5) в следующем ( /Users/jorgevasquez/myProjects/myProjects/WebDev/teslaProject/node_modules/express/lib/router/route.js:137:13) в Route.dispatch (/ Users / jorgevasquez / myProjects / myProjects / WebDev / teslaProject / /express/lib/router/route.js:112:3) в Layer.handle [как handle_request] (/Users/jorgevasquez/myProjects/myProjects/WebDev/teslaProject/node_modules/express/lib/router/layer.js: 95: 5) в /Users/jorgevasquez/myProjects/myProjects/WebDev/teslaProject/node_modules/express/lib/router/index.js:281:22 в Function.process_params (/ Users / jorgevasquez / myProjects / MyProjects / WebDev / тэ slaProject / node_modules / express / lib / router / index. js: 335: 12) в следующем (/Users/jorgevasquez/myProjects/myProjects/WebDev/teslaProject/node_modules/express/lib/router/index.js: 275: 10) в SendStream.error (/Users/jorgevasquez/myProjects/myProjects/WebDev/teslaProject/node_modules/serve-static/index.js:121:7) в SendStream.emit (события. js: 189 : 13) в SendStream.error (/Users/jorgevasquez/myProjects/myProjects/WebDev/teslaProject/node_modules/send/index.js:270:17) в SendStream.onStatError (/ Users / jorgevasquez / myProjects / myProjects Web) /teslaProject/node_modules/send/index.js:421:12) в следующем (/Users/jorgevasquez/myProjects/myProjects/WebDev/teslaProject/node_modules/send/index.js:763:28) в / Users /jorgevasquez/myProjects/myProjects/WebDev/teslaProject/node_modules/send/index.js:771:23 в FSReqWrap.oncomplete (фс. js: 154: 21)

Любой намек на то, что Я делаю неправильно? Спасибо!

Опции. js


module.exports = class Options {

  construtor(){
    console.log("do nothing");
  }
   /**
   * Modify request type (i.e. GET, POST, etc.)
   */
   modifyRequestMethod() {
    throw new Error('You have to implement the method doSomething!');
 }

  /**
   * Modify URL
   */
  modifyUrl() {
    throw new Error('You have to implement the method doSomething!');
 }

 /**
  * Modify the request headers
  */
 modifyHeaders() {
    throw new Error('You have to implement the method doSomething!');
  }

  /**
   * Modify the request body
   */
  modifyBody(){
    throw new Error('You have to implement the method doSomething!');
  }

  updateOptions() {
    modifyRequestMethod();
    modifyUrl();
    modifyHeaders();
    modifyBody()
  }

  returnOptions() {
  return {
    url: this.requestURL,
    method: this.requestMethod,
    json: true,
    headers: this.requestHeaders,
    gzip: true,
    body: this.requestBody 
  };
}
}

accessToken. js

let optionsObj = require('./Options.js');
module.exports = class accessToken extends optionsObj {

    constructor() {
        console.log("Child");
        Options.apply(this, arguments);
        updateOptions();
        returnOptions(); 
    }


    modifyRequestMethod() {
        this.requestMethod = 'POST';
 }

    modifyUrl() {
        this.requestURL = 'https://owner-api.teslamotors.com/oauth/token';
 }

    modifyHeaders() {
        this.requestHeaders = {
        "x-tesla-user-agent": "TeslaApp/3.4.4-350/fad4a582e/android/8.1.0",
        "user-agent": "Mozilla/5.0 (Linux; Android 8.1.0; Pixel XL Build/OPM4.171019.021.D1; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/68.0.3440.91 Mobile Safari/537.36",
        "Content-Type": "application/json",
        "charset": "utf-8"
      }
  }

    modifyBody(){
        this.requestBody = {
        "grant_type": 'password',
        "client_id": '81527cff06843c8634fdc09e8ac0abefb46ac849f38fe1e431c2ef2106796384',
        "client_secret": 'c7257eb71a564034f9419ee651c7d0e5f7aa6bfbd18bafb5c5c033b093bb2fa3',
        "email": 'myEmail',
        "password": 'myPassword'
      };
  }

};

app. js

const express = require("express");
const app = express();
var path = require("path");
var bodyParser = require("body-parser");
var rp = require('request-promise');
const port = 3000;
let optionsObj = require('./helper/Options.js');
let accessObject = require('./helper/accessToken.js')
app.use(express.static(path.join(__dirname, '/public')));
app.set("view engine", "ejs");
var accessToken;

app.get("/", async(req, resp) => {

  accessObject.updateOptions();
  const first_response = await rp(accessObject.returnOptions());
  myaccessToken = (JSON.parse(JSON.stringify(first_response))).access_token;

});

app.listen(port, () => {console.log('Example app listening on port ${port}!') } )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...