【问题标题】:Error setting cookie and getting a json response with router.post in express, node.js设置 cookie 并在 express、node.js 中使用 router.post 获取 json 响应时出错
【发布时间】:2018-12-18 00:59:38
【问题描述】:

我正在尝试使用 post 方法设置 cookie,以便进行一些 db 查询并将其放回 cookie 值中,并返回包含用户数据的 json。 它有效,cookie 已设置,我在http://localhost:8080 上获得了 json 但我从编译器收到一条消息:

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

我怎样才能修复它,使它不会出现这个错误?

我的文件结构是: root/app.js

root/controllers/cookie.controller.js

root/routes/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();
};

【问题讨论】:

    标签: javascript node.js express cookies


    【解决方案1】:

    在getCookie 控制器末尾发送响应后,您正在修改请求 cookie 标头。您应该在发送响应之前删除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))
    

    【讨论】:

      【解决方案2】:

      从 app.js 中删除 cors 后问题解决

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-30
        • 2013-01-06
        • 2012-12-20
        • 1970-01-01
        • 2022-07-18
        相关资源
        最近更新 更多