0

trying to write a post request body to a text file using node js file system but i keep on getting this error and i don't even know what it means : Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client at new NodeError (node:internal/errors:393:5) at ServerResponse.setHeader (node:_http_outgoing:644:11) can any one help? here is my code

var express = require('express');
var router = express.Router();
const message_control_post = require('../controllers/messageControl.js')
const { body, validationResult } = require('express-validator')
const fs = require('fs')
const fsPromises = require('fs').promises
const path = require('path')


/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index');
});

router.post('/', message_control_post.message_control)

router.post('/test', (req, res, next) => {
  const message = `${req.body.name} sent ${req.body.email} this message: ${req.body.msg}`
  fs.writeFile(path.join(__dirname, 'files', 'msg.txt'), message, (err) => {
    if (err) {
      return next(err)
    } else {
      console.log(message)
    }
    
  })
  next()
}, (req, res, next) => {
  res.send(req.body)
});

payiyke
  • 19
  • 3
  • Does this answer your question? [Error: Can't set headers after they are sent to the client](https://stackoverflow.com/questions/7042340/error-cant-set-headers-after-they-are-sent-to-the-client) – Lajos Arpad Feb 12 '23 at 15:45

1 Answers1

0

The callback - last param of fs.writeFile will be called after the next(). So here the flow of your code:

fs.writeFile -> next -> res.send -> next(err) -> res.send

The second res.send then throw an Error [ERR_HTTP_HEADERS_SENT]

I think your code should look like this:

router.post('/test', (req, res) => {
  const message = `${req.body.name} sent ${req.body.email} this message: ${req.body.msg}`
  fs.writeFile(path.join(__dirname, 'files', 'msg.txt'), message, (err) => {
    if (err) {
      return res.send(error);
    } else {
      res.send(req.body)
    }
  })
});
hungtran273
  • 1,180
  • 9
  • 11