无法传递对象以在节点 js/express js 上导出 javascript 模块

Unable to pass an object to exported javascript module on nodejs / expressjs

我无法将对象传递给从另一个模块导出的函数。故事是这样的。

我正在从模块 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;
}

现在,在Controller中,requestParams返回成功。但是当调用在TagService进入addTag函数时,对象tag没有被传递!

更多背景知识。这是从 openapi-generator 为 nodejs-express-server 存根生成的代码。

这是标签服务的 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

使用 node 12.16.2express 4.16.1

我想问题是你用 ({...})

解构了对象

在您的情况下,如果您传递的对象没有名为 tag 的 属性,则您只能从传递的对象访问 属性 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);