javascript - 如何在 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?
解决方案
从文档中,
app.use([path,] callback [, callback...])
:在指定路径挂载指定的中间件函数或函数:当请求路径的基数与路径匹配时执行中间件函数。
您正在传递您的课程,因为它在参数中。您需要根据上图传递一个有效的回调。有关更多示例,请参阅链接的文档。
推荐阅读
- windows - 使用 windows 代理从 teamcity 推送更改到 git 的步骤是什么
- .net-core - MySql.Data 无法连接到 AWS Aurora
- python - Django Filter timestamp data GROUP BY day, week, month, year
- c++ - 为什么 HeapFree() 不能正常工作?
- javascript - 带有 Express 的 NodeJS 4 不会使用 get/post 向服务器发送请求
- django - Django 管理对静态文件 url 的请求
- c - 计算C语言中的字符数
- python - python中的索引错误
- three.js - 使用 Three.js 和 Shader 设计粒子系统
- postman - 在邮递员中导入标准的http请求?