lib/common/xml-data-bridge/xml-data-bridge.middleware.ts
Middleware for parsing XML data from requests.
Properties |
|
Methods |
|
Async use | ||||||||||||||||
use(req: Request, res: Response, next: NextFunction)
|
||||||||||||||||
Parses XML data from the request and modifies the request body.
Parameters :
Returns :
any
|
Private Readonly parser |
Default value : Xdb.getXmlParser()
|
import { Injectable, NestMiddleware } from "@nestjs/common";
import { NextFunction, Request, Response } from "express";
import { Xdb } from "./xml-data-bridge.constants";
/**
* Middleware for parsing XML data from requests.
*/
@Injectable()
export class XmlDataBridgeMiddleware implements NestMiddleware {
private readonly parser = Xdb.getXmlParser();
/**
* Parses XML data from the request and modifies the request body.
* @param req - The request object.
* @param res - The response object.
* @param next - The next function to call.
*/
async use(req: Request, res: Response, next: NextFunction) {
if (req.headers["content-type"] === "application/xml") {
req.body = await this.parseXMLFromRequest(req);
req.body = Xdb.parseXmlBody(req.body);
}
next();
}
/**
* Parses XML data from the request.
* @param req - The request object.
* @returns A promise that resolves to the parsed XML data.
*/
private parseXMLFromRequest(req: Request): Promise<object> {
return new Promise((resolve, reject) => {
let xmlData = "";
req.on("data", (chunk) => {
xmlData += chunk;
});
req.on("end", () => {
this.parser.parseString(xmlData, (err, result) => {
if (err) {
reject(err);
} else {
resolve(result as object);
}
});
});
});
}
}