Home > Software design >  What is wrong with this Node.js snippet?
What is wrong with this Node.js snippet?

Time:01-09

I am learning node.js and the course says there is something wrong with the following snippet.

const fs = require('fs');
const http = require('http');
 
const server = http.createServer((req, res) => {
  if (req.headers['x-secret'] != process.env.SECRET )
    res.writeHead(403).end('Secret incorrect');
 
  let body = [];
  req.on('data', chunk => {
    body.push(chunk);
  });
  req.on('end', () => {
    body = JSON.parse(Buffer.concat(body).toString());
    fs.writeFileSync(body.filename, body.file);
    res.writeHead(200).end('OK');
  });
});
 
server.listen(7654);

Possible things I've found include:

  • https should be used instead of http (secure server)

  • Res.writeHead.end is not valid syntax. Res.writeHead and res.end
    should be written separately

  • fs.writeFile() should be used, not the async version

  • There's no failsafe built-in (?)

However the course seems to be saying that there's a big mistake, which I can't really find.

Please help!

Thanks

CodePudding user response:

Buffer.concat(body).toString() is not valid JSON, so You can't parse it. what you will receive if you log it

----------------------------118769234111712879210320
Content-Disposition: form-data; name="data"; filename="test.json"
Content-Type: application/json

{
    "test": "156"
}
----------------------------118769234111712879210320--

like this

CodePudding user response:

The only problem i see here is in the line

let body = [];

you cannot initialize body as an empty array as you are using it as an object in line

fs.writeFileSync(body.filename, body.file);

you cannot do body.filename as dot notation is only used in an object.

  • Related