编译时出现此控制台错误:
Property 'rawBody' does not exist on type 'Request'.
在这行代码上:
busboy.end(req.rawBody);
这些docs状态应该在那里。但是,当我改用打字稿时,我得到了一个错误。
当我提供该功能时,代码仍在本地运行,但是我想知道发生了什么,为什么以及如何清除类型错误。好像我无视他们,为什么要使用TS,我应该回到简单的js。
答案 0 :(得分:1)
我正在将 Firebase Cloud Function 与 Typescript 结合使用,这也会引发此错误。
我的临时解决方法是使用 as
关键字告诉编译器在访问 req
时将 rawBody
对象视为另一种类型。
示例
import { Request, Response } from "express-serve-static-core"
import { https } from "firebase-functions";
type FirebaseRequest = https.Request
// The parameters still use the default types from express,
// but consider it as another type when accessing rawBody
const myFunc = async (req: Request, res: Response) => {
const rawVar = (req as FirebaseRequest).rawBody;
}
答案 1 :(得分:0)
您未提供有关代码的任何信息。 确保您安装并需要body-parser。
const bodyParser = require('body-parser')
答案 2 :(得分:0)
在我调用的代码之后:
busboy.on("finish"), () => {
<code in here>
});
我最终使用了这个而不是busboy.end(req.rawBody);
:
req.pipe(busboy);
现在工作正常!
答案 3 :(得分:0)
现在遇到此问题。 Typescript声明它不应该在那儿,但它确实在那儿。您可以像这样将内容添加到Express.Request的打字稿定义中(与multer一样)
import { Request, ParamsDictionary, NextFunction, Response } from "express-serve-static-core";
interface BusboyFile {
fieldname: string
file: NodeJS.ReadableStream | undefined
filename: string;
destination: string;
encoding?: string,
mimetype?: string
}
declare global {
namespace Express {
interface Request {
files: {
[fieldname: string]: BusboyFile[];
};
rawBody: any
}
}
}
type uploadBusboy = (request: ExpressRequest<ParamsDictionary>, response: Response, next: NextFunction)=>void
然后我的功能:
export const uploadBusboy: uploadBusboy = (request, response, next) => {
const busboy = new Busboy({ headers: request.headers });
// ...code here
busboy.end(request.rawBody);
}
export default uploadBusboy