Giter Site home page Giter Site logo

Comments (7)

dougwilson avatar dougwilson commented on April 27, 2024 1

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:

https://github.com/colyseus/uWebSockets-express/blob/68c60fe77dba469021da85ce9fe4adda6d407eaa/src/IncomingMessage.ts#L166

https://github.com/colyseus/uWebSockets-express/blob/68c60fe77dba469021da85ce9fe4adda6d407eaa/src/IncomingMessage.ts#L178

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.

from body-parser.

dougwilson avatar dougwilson commented on April 27, 2024

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.

from body-parser.

WilliamLoey avatar WilliamLoey commented on April 27, 2024

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);
  }
});

from body-parser.

Brahmah avatar Brahmah commented on April 27, 2024

Just an FYI, I was getting the same error using this lib without express.

image

from body-parser.

dougwilson avatar dougwilson commented on April 27, 2024

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.

from body-parser.

Brahmah avatar Brahmah commented on April 27, 2024

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.

from body-parser.

Brahmah avatar Brahmah commented on April 27, 2024

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...

https://github.com/colyseus/uWebSockets-express/blob/68c60fe77dba469021da85ce9fe4adda6d407eaa/src/IncomingMessage.ts#L178

from body-parser.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.