Ошибка установки cookie и получения ответа json с router.post в express, node.js - PullRequest
0 голосов
/ 17 декабря 2018

Я пытаюсь установить cookie с помощью метода post, чтобы выполнить какой-либо запрос базы данных и вернуть его в значение cookie, а также вернуть json с пользовательскими данными.Это работает, cookie установлен, и я получаю json на http://localhost:8080, но я получаю сообщение от компилятора:

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

Как я могу это исправить, чтобы не было этой ошибки?

моя файловая структура: root / app.js

root / controllers / cookie.controller.js

root / routs / cookie.route.js

app.js

const express = require('express');
const cors = require('cors');
const cookieParser = require('cookie-parser');

const app = express();
const port = process.env.PORT || process.argv[2] || 8080;

app.use(cookieParser());
app.use(require('./routes/cookies'));
app.use(cors());

app.listen(port, () => console.log('cookie-parser demo is up on port: ' + port));

cookie.route.js

const express = require('express');

const cookieController = require('../controllers/cookies');

const router = express.Router();

router.use(require('cookie-parser')());

router.post('/', router.use(cookieController.getCookie));

module.exports = router;

cookie.controller.js

exports.getCookie = (req, res, next) => {
    let auth = req.cookies.auth;
    //...db queries, get userData

    let userData = {
        id: '123',
        token: 'sfsdfs34',
        email: 'user@gmail.com'
    };

    // if cookie doesn't exist, create it
    if (!auth) {
        res.status(200)
            .cookie('auth', userData.id)
            .json({ message: 'it works!', user: userData });
        req.cookies.auth = userData.id;
    }
    next();
};

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Проблема была решена после удаления cors из app.js

0 голосов
/ 17 декабря 2018

Вы изменяете заголовки файлов cookie запроса после отправки ответа в конце вашего getCookie контроллера.Вы должны удалить req.cookies.auth = userData.id и использовать res.cookie() вместо отправки ответа.

const express = require('express')
const cookieParser = require('cookie-parser')

const app = express()

app.use(cookieParser())

app.get('/', (req, res) => {
  if (!req.cookies.auth) {
    res.cookie('auth', { id: '123' })
  }

  res.json({ message: 'It worked!' })
})

app.listen(8080, () => console.log('http://localhost:8080))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...