Javascript 传递对象以表示导出函数

Javascript 传递对象以表示导出函数,javascript,typescript,express,node-modules,Javascript,Typescript,Express,Node Modules,虽然我遇到了一个问题,但我正在学习打字技巧:我有一个名为Manager的类,它包含并管理多个“子”管理器。在索引文件中,我通过创建一个实例并调用load函数来加载管理器。当加载所有“子”管理器时,会获得对主/仅管理器实例的引用,这样他们就可以调用/使用其他“子”管理器 但我希望能够从RESTAPI端点的“子”经理那里获得一些信息。这些端点通过路由加载: 索引 路由文件如下所示: 路线 最后但并非最不重要的是,这是一个包含实际逻辑的Express endpoint文件: 控制器/get.ts 现在

虽然我遇到了一个问题,但我正在学习打字技巧:我有一个名为
Manager
的类,它包含并管理多个“子”管理器。在索引文件中,我通过创建一个实例并调用load函数来加载管理器。当加载所有“子”管理器时,会获得对主/仅
管理器
实例的引用,这样他们就可以调用/使用其他“子”管理器

但我希望能够从RESTAPI端点的“子”经理那里获得一些信息。这些端点通过路由加载:

索引

路由文件如下所示:

路线

最后但并非最不重要的是,这是一个包含实际逻辑的Express endpoint文件:

控制器/get.ts


现在我需要访问
控制器/get.ts
中的主管理器实例,但我无法将其作为参数传递(据我所知),因为它是一个导出。我只想导入Manager类并创建一个新实例,但我只想启动Manager一次,因为它包含包中的逻辑,例如interval和speaker实例。我希望我能解释这个问题,但如果有人需要澄清什么,我会更新帖子。

你可以把它作为一个参数传递。没有任何东西可以阻止您在
索引中执行类似的操作。ts

// Generate Express route
expressApp[singleRoute.method](singleRoute.path, (request: Request, response: Response, next: Function) => {
    singleRoute.action(request, response, manager)
        .then(() => next())
        .catch((error) => next(error));
    });
});
然后在导出的控制器方法上更新签名,如下所示

import { Manager } from '../manager';

export async function getSpeakerById(request: Request, response: Response, manager: Manager) {
    ...
}

在索引文件中,我通过创建一个实例并调用加载函数来加载管理器
您可以将执行此操作的代码添加到index.ts中吗?@rh16我已经更新了index.ts片段以包含所有内容:)噢,哇,我真傻,竟然没有注意到。非常感谢!:)
import { Request, Response } from "express";
import { getManager } from "typeorm";

import { Speaker } from "../entity/Speaker";

const ping = require("ping");

export async function getSpeakerById(request: Request, response: Response) {
    const speakerRepository = getManager().getRepository(Speaker);
    const speakerObject = await speakerRepository.findOne(request.params.id);

    // If no post is found return 404
    if (!speakerObject) {
        response.status(404);
        response.send("Speaker doesn't exist");
        response.end();
        return;
    }

    // Ping speaker and bind the time once its been resolved
    speakerObject.time = await ping.promise.probe(speakerObject.host);

    response.send(speakerObject);
}

export async function getSpeakerAll(request: Request, response: Response) {
    const speakerRepository = getManager().getRepository(Speaker);
    const speakerObjects = await speakerRepository.find();
    const speakerPromise = [];

    // Create a promise array of pings to all speakers
    speakerObjects.forEach((speakerObject) => speakerPromise.push(ping.promise.probe(speakerObject.host)));

    const speakerResults = await Promise.all(speakerPromise);

    // Since the promise array is based on order we can rebind the property by looping over it in the same order
    speakerResults.forEach((speakerResult, speakerIndex) => speakerObjects[speakerIndex].time = speakerResult.time);

    response.send(speakerObjects);
}
// Generate Express route
expressApp[singleRoute.method](singleRoute.path, (request: Request, response: Response, next: Function) => {
    singleRoute.action(request, response, manager)
        .then(() => next())
        .catch((error) => next(error));
    });
});
import { Manager } from '../manager';

export async function getSpeakerById(request: Request, response: Response, manager: Manager) {
    ...
}