Невозможно передать объект в экспортированный модуль javascript на nodejs / expressjs - PullRequest
1 голос
/ 16 июня 2020

Я не могу передать объект функции, экспортированной из другого модуля. Вот как обстоят дела.

Я экспортирую функцию из модуля TagService. js

файл: TagService. js

addTag = ({tag}) => {
  //some activity
}

module.exports = { addTag, //other functions}

Вызов функции из модуля ServiceHandler. js

файл: ServiceHandler. js

const Controller = require('./Controller');
const service = require('../services/TagService');
const addTag = async (request, response) => {
  await Controller.handleRequest(request, response, service.addTag);
};

Вот как устроен контроллер в Controller. js

файл: Controller. js

static async handleRequest(request, response, serviceOperation) {
  //some activity    
  const serviceResponse = await serviceOperation(this.collectRequestParams(request));
  //some more activity...
}

static collectRequestParams(request) {
  //some activity
  return requestParams;
}

Теперь, в контроллере , requestParams возвращается успешно. Но когда вызов переходит в функцию addTag по адресу TagService , объект tag не передается!

Еще немного фона. Это код, сгенерированный из openapi-generator для заглушки nodejs - express -сервера.

Вот шаблон openapi.yaml для службы тегов.

/samyojya-tag:
    post:
      operationId: addTag
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Tag'
      responses:
        "201":
          content:
...
schemas:
  Tag:
      example:
        name: name
        id: 1
        type: type
      properties:
        id:
          type: string
        name:
          type: string
        category:
          type: string
      type: object
      xml:
        name: Tag

Использование узла 12.16.2 и express 4.16.1

1 Ответ

0 голосов
/ 16 июня 2020

Я полагаю, проблема в том, что вы деструктурируете объект с помощью ({...})

В вашем случае вы можете получить доступ к свойству tag только из переданного объекта, если ваш переданный объект не имеет свойства с именем named tag, его значение не определено.

Вы должны изменить это ({tag}) на это (tag), чтобы получить полный доступ к переданному вами объекту

var obj = {
   test: "i work",
   tag: "i work too"
}

function test({tag}){
   console.log(tag);
}

function test2(tag){
   console.log(tag);
}

test(obj)
test2(obj);
...