Другой «Невозможно установить заголовки после их отправки клиенту» при отправке формы - PullRequest
0 голосов
/ 06 мая 2020

Я получаю следующую ошибку, когда отправляю текст в форму с одним полем на свой node.js сервер:

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at ServerResponse.setHeader (_http_outgoing.js:485:11)
    at ServerResponse.header (C:\Users\hbhar\Desktop\Basic WebApp\node_modules\express\lib\response.js:771:10)
    at ServerResponse.json (C:\Users\hbhar\Desktop\Basic WebApp\node_modules\express\lib\response.js:264:10)
    at ServerResponse.send (C:\Users\hbhar\Desktop\Basic WebApp\node_modules\express\lib\response.js:158:21)
    at C:\Users\hbhar\Desktop\Basic WebApp\routes\index.js:15:9
    at Layer.handle [as handle_request] (C:\Users\hbhar\Desktop\Basic WebApp\node_modules\express\lib\router\layer.js:95:5)
    at next (C:\Users\hbhar\Desktop\Basic WebApp\node_modules\express\lib\router\route.js:137:13)
    at module.exports (C:\Users\hbhar\Desktop\Basic WebApp\routes\index.js:11:5)
    at Layer.handle [as handle_request] (C:\Users\hbhar\Desktop\Basic WebApp\node_modules\express\lib\router\layer.js:95:5)
    at next (C:\Users\hbhar\Desktop\Basic WebApp\node_modules\express\lib\router\route.js:137:13)

Хотя маршрутизатор успешно отображает страницу после отправки формы, я могу не отправлять на консоль какие-либо данные или данные журнала. К сожалению, мне не удалось решить проблему, основываясь на ответах на похожие вопросы. Заранее спасибо. Также приветствуются любые предложения ресурсов для заголовков HTTP (кроме MDN).

Мой индекс. js файл (находится в / routes):

const express = require('express');
const router = express.Router();

// Welcome Page
router.get('/', (req, res) => res.render('welcome'));

// After Form Submission
router.get('/submitform', function(req, res, next) 
  {
    res.render('submitform');
    next(); 
  }, function(req,res)
  {
    const formsubmission = req.query; 
    res.send(formsubmission);
    console.log(formsubmission);
  }
 );

module.exports = router;

Используемый файл для запуска npm (обычно называется app. js):

const express = require('express');
const path = require('path');
const webapp = express();
const expressLayouts = require('express-ejs-layouts');

webapp.use(expressLayouts);
webapp.set('view engine', 'ejs');

// Body Parser Middleware
webapp.use(express.json());
webapp.use(express.urlencoded({ extended: false })); 

// Routing to default directory
webapp.use('/', require('./routes/index'));
// Link folder for static files
webapp.use(express.static(path.join(__dirname, 'public')));

const PORT = process.env.PORT || 3000;
webapp.listen(PORT, () => console.log(`Server started on port ${PORT}`));

1 Ответ

0 голосов
/ 06 мая 2020

Вы можете позвонить на res.render('submitform'); и res.send(formsubmission); по одному и тому же запросу. Вы можете сделать только один ответ на запрос. Выберите один из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...