首页 > 解决方案 > 如何在 express().use 中调用一个类?

问题描述

我正在使用打字稿学习 Node JS,但遇到了一个问题。在app.ts文件中,我已经初始化express并尝试在app.use()方法内部调用路由器类,但它给出了错误。以下是我的相同代码:

应用程序.ts

import express, { Request, Response, NextFunction } from 'express';
import bodyParser from 'body-parser';
import db from './models/database';
import { AuthRouter } from './routes/auth.routes';

export class App {
    app = express();
    ADMIN_URL = '/api/admin';
    PORTAL_URL = '/api/portal';

    constructor() {
        db.sequelize.sync().then(() => console.log('Drop and re-sync db'));
        this.app.use(bodyParser.json({
            type: 'application/json',
            limit: '50mb'
        }));
        this.app.use(bodyParser.urlencoded({
            limit: '50mb',
            extended: true,
            parameterLimit: 50000
        }));
        this.enableCORS();
        this.adminApis();
    }
    private adminApis() {
        this.app.use(`${this.ADMIN_URL}/auth`, AuthRouter);  // This "AuthRouter" is giving error
    }

    private enableCORS() {
        this.app.use((req:Request, res:Response, next:NextFunction) => {
            res.setHeader('Access-Control-Allow-Origin', '*');
            res.setHeader('Access-Control-Allow-Headers', 
            'Origin, X-Requested-With, Content-Type, Accept, Authorization');
            res.setHeader('Access-Control-Allow-Methods', 
            'GET, POST, PATCH, PUT, DELETE, OPTIONS');
            next();
        });
    }
}

auth.route.ts

import { Router } from 'express';
import { SignUp, Login, getAllAdmin, fetchUserDetails, updateAdminUser, deleteAdminUser, deleteAllAdminUser } from '../controller/auth.controller';
import verifySignUp from '../middlewares/verifySignUp';
import verifyToken from '../middlewares/authcheck';

export class AuthRouter {
    
    constructor(private router: Router) {
        this.setPOSTRoutes();
    }

    private setPOSTRoutes() {
        this.router.post('/createAdminUser', verifySignUp, SignUp);
        this.router.post('/login', Login);
    }
}

以下是当我将鼠标悬停在app.ts文件中的注释行上时编辑器显示的消息:

没有重载匹配此调用。最后一个重载给出了以下错误。“typeof AuthRouter”类型的参数不可分配给“Application”类型的参数。“typeof AuthRouter”类型缺少“Application”类型的以下属性:init、defaultConfiguration、engine、set 和 61 more.ts(2769)

我怎样才能解决这个问题?并且在 Web 上是否有任何示例项目可用于使用类的带有 Typescript 的 Node JS?

标签: javascriptnode.jstypescriptexpress

解决方案


文档中,

app.use([path,] callback [, callback...]):在指定路径挂载指定的中间件函数或函数:当请求路径的基数与路径匹配时执行中间件函数。

在此处输入图像描述

您正在传递您的课程,因为它在参数中。您需要根据上图传递一个有效的回调。有关更多示例,请参阅链接的文档。


推荐阅读