Axios- Node JS cookie 解析器返回一个空对象
Axios- Node JS cookie parser is returning a empty object
我正在做我的项目。当我使用 Axios 时,我 运行 遇到了一些我没有解决的问题。
在这里我看到了一个代表我情况的类似问题:
Node JS cookie parser not working
这是我安装并导入了 Axios 的 React 代码:
useEffect(() => {
axios.get('http://localhost:5000/get-cookie')
.then(response => {
console.log(response.data);
})
}, [])
还有我的app.js代码
const express = require('express');
const cors = require('cors');
const mongoose = require('mongoose');
const Grid = require("gridfs-stream");
const cookieParser = require('cookie-parser');
const app = express();
const port = process.env.PORT || 5000;
require('dotenv').config()
//middleware
app.use(cors());
app.use(express.json());
// connecting to database
let gfs;
const uri = process.env.DB
mongoose.connect(uri, { useNewUrlParser: true, useCreateIndex: true, useUnifiedTopology: true });
const conn = mongoose.connection;
conn.once("open", function () {
console.log("MongoDB database connection established successfully");
gfs = Grid(conn.db, mongoose.mongo);
gfs.collection("photos");
});
// cookie routes
app.use(cookieParser());
app.get('/set-cookie/:id', (req, res) => {
res.cookie("User_ID", req.params.id, {maxAge: 1000 * 60 * 60 * 24 * 31, httpOnly: true})
res.json("You setted the cookies")
});
app.get('/get-cookie', (req, res) => {
var cookies = req.cookies
res.json(cookies)
});
// custom routes
const notes_router = require('./routes/notes')
const avatar_router = require('./routes/avatar');
const user_router = require('./routes/user');
app.use(avatar_router);
app.use(user_router);
app.use(notes_router);
app.listen(port, () => {
console.log(`Server is running on port: ${port}`);
});
module.exports = gfs
我在 postman 上测试了这些并且它们有效。
所以我需要帮助
Axios 默认不发送 cookie,但您可以将选项 withCredentials
作为 true
传递,它应该可以工作
useEffect(() => {
axios.get('http://localhost:5000/get-cookie',{withCredentials: true})
.then(response => {
console.log(response.data);
})
}, [])
编辑:您还必须在您的 Express 应用程序上设置 CORS 策略才能正常工作,您可以尝试以下中间件(假设您的 React 应用程序是 运行 on localhost:3000
,您可以改变它匹配你):
app.use(function(req, res, next) {
res.header('Access-Control-Allow-Origin', 'http://localhost:3000');
res.header('Access-Control-Allow-Credentials', true);
res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
next();
});
或者您也可以使用 CORS npm 包。
我正在做我的项目。当我使用 Axios 时,我 运行 遇到了一些我没有解决的问题。
在这里我看到了一个代表我情况的类似问题: Node JS cookie parser not working
这是我安装并导入了 Axios 的 React 代码:
useEffect(() => {
axios.get('http://localhost:5000/get-cookie')
.then(response => {
console.log(response.data);
})
}, [])
还有我的app.js代码
const express = require('express');
const cors = require('cors');
const mongoose = require('mongoose');
const Grid = require("gridfs-stream");
const cookieParser = require('cookie-parser');
const app = express();
const port = process.env.PORT || 5000;
require('dotenv').config()
//middleware
app.use(cors());
app.use(express.json());
// connecting to database
let gfs;
const uri = process.env.DB
mongoose.connect(uri, { useNewUrlParser: true, useCreateIndex: true, useUnifiedTopology: true });
const conn = mongoose.connection;
conn.once("open", function () {
console.log("MongoDB database connection established successfully");
gfs = Grid(conn.db, mongoose.mongo);
gfs.collection("photos");
});
// cookie routes
app.use(cookieParser());
app.get('/set-cookie/:id', (req, res) => {
res.cookie("User_ID", req.params.id, {maxAge: 1000 * 60 * 60 * 24 * 31, httpOnly: true})
res.json("You setted the cookies")
});
app.get('/get-cookie', (req, res) => {
var cookies = req.cookies
res.json(cookies)
});
// custom routes
const notes_router = require('./routes/notes')
const avatar_router = require('./routes/avatar');
const user_router = require('./routes/user');
app.use(avatar_router);
app.use(user_router);
app.use(notes_router);
app.listen(port, () => {
console.log(`Server is running on port: ${port}`);
});
module.exports = gfs
我在 postman 上测试了这些并且它们有效。 所以我需要帮助
Axios 默认不发送 cookie,但您可以将选项 withCredentials
作为 true
传递,它应该可以工作
useEffect(() => {
axios.get('http://localhost:5000/get-cookie',{withCredentials: true})
.then(response => {
console.log(response.data);
})
}, [])
编辑:您还必须在您的 Express 应用程序上设置 CORS 策略才能正常工作,您可以尝试以下中间件(假设您的 React 应用程序是 运行 on localhost:3000
,您可以改变它匹配你):
app.use(function(req, res, next) {
res.header('Access-Control-Allow-Origin', 'http://localhost:3000');
res.header('Access-Control-Allow-Credentials', true);
res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
next();
});
或者您也可以使用 CORS npm 包。