如何解决带有自定义预期字段的 Express 路由器请求
我正在将基于 JS 的 express 应用程序重写为 Typescript。在重构路由器实例时,我偶然发现了以下问题:
this.router.get('/tenantInfo',(req,res) => {
res.send(this.getTentantInfo(req.tenant))
})
当我想将其转换为 Typescript 时,它看起来像这样:
import express,{ Request,Response,Router } from 'express'
this.router.get('/tenantInfo',(req: Request,res: Response) => {
res.send(this.getTentantInfo(req.tenant))
})
导致 req.tenant
出错,因为 Request
没有这个属性。我搜索了 Stackoverflow 并找到了 this answer,但是,我认为如果我只是使用每个和 每个附加属性扩展 express 的 Request
接口,这不会导致良好的应用程序结构> 我希望在我的应用程序的各个地方。
解决方法
您可能需要在使用前检查 tenant
,例如:
this.router.get('/tenantInfo',(req: Request,res: Response) => {
if(req.tenant){
res.send(this.getTentantInfo(req.tenant))
}
res.send({
message: "Your error message..."
})
})
我不确定,但测试一下,看看它是否能解决您的问题
,这可能不会增加我的评论,但您也可以将 .d.ts
文件分隔到多个位置。假设你有这个目录结构
.
└── src
├── tenant
│ ├── request.d.ts
│ └── routes.ts
├── some
│ ├── interface.ts
│ ├── some.d.ts
│ └── routes.ts
├── other
│ └── ...
└── stuff
└── ...
在tenant/request.d.ts
declare namespace Express {
interface Request {
tenant?: string;
}
}
在some/interface.ts
export interface Some {
foo: string;
bar: string;
}
并在some/request.d.ts
import { Some } from "./interfaces";
declare namespace Express {
interface Request {
some?: Some;
}
}
同样适用于 other
和 stuff
...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。