Closed MudabbarHussain closed 11 months ago
Hi, and sorry you are having an issue. There isn't enough information to be able to diagnose your issue. Please, can you provide the exact method and details to reproduce this issue? Specifically the exact details to send the request.
Looking at your code snippet, it appears that you are using the HTTP GET method to retrieve a user by email, but you are passing the email as part of the request body. The HTTP GET method does not have a request body, so this is likely causing the issue.
To fix this, you can pass the email as a query parameter instead of in the request body. Here's an updated version of your code:
this.router.get('/by-email', async (req, res) => {
try {
const { email } = req.query;
const data = await new userController().getOneUser(email);
res.status(200).send(data);
} catch (error) {
res.send(error);
}
});
Just an FYI, I was getting the same error using this lib without express.
Thank you for the update and sorry we have been unable to fix. Unfortunately without a reproducable example and code to demo we don't know what the problem is. You are always welcome to make a pull request qoth a fiz, or if you can provide a reproducable example we can reopen this issue and figure out what is happening and fix.
Hey @dougwilson
Looks like the issue was with the raw-body
dependency.
For my use, I've since patched the package with a fix
We started sporadically getting these errors since switching to uWebSockets.js with https://github.com/colyseus/uWebSockets-express, usually when the req body contained any chars that were larger than a single byte.
This is because chunks were measured via their char length instead of bytes...
I recognise that this isn't a documented canonical use of the library so your prerogative to determine what's best.
Ah, I see. The issue is actually not in raw-body, but in that uwebsockets lib. It will utf-8 decode the body before it sends it to raw-body:
This will of course mean any binary data will end up corrupted with that uwebsockets lib. It looks like that is why raw-body is unexpectedly getting a decoded string instead of Buffer objects like would happen with the actual Node.js http objects.
I would suggest fixing at the root cause instead of raw-body, as it would also fix corruption of non-utf-8 bodies too.
Agreed @dougwilson, thanks for picking up on that!
This was merely a quick fix to bring back prod services after we found out about the regression affecting all requests from a particular client, until I could investigate further.
Agree that patching uwebsockets-express would be far more apposite so will get to that shortly...
When I hit the API to get a user having the particular email I got the following error. BadRequestError: request size did not match content length here is: request body: { "email":"ali@gmail.com" } Code snippet this.router.get('/by-email', async (req, res) => { try { const {email} = req.body; const data = await new userController().getOneUser(email); res.status(200).send(data); } catch (error) { res.send(error); } }); please help me to resolve this issue.