Javascript 如何在nextjs api中从浏览器读取cookie
我正在layout.js组件中设置cookie,并可以在浏览器中看到它 我有我的api,我希望能够在发布帖子时读取cookie,然后使用该值执行一些操作 我尝试了几个不同的包来实现这一点,我得到了“未定义”的cookie值 如何读取Javascript 如何在nextjs api中从浏览器读取cookie,javascript,reactjs,next.js,Javascript,Reactjs,Next.js,我正在layout.js组件中设置cookie,并可以在浏览器中看到它 我有我的api,我希望能够在发布帖子时读取cookie,然后使用该值执行一些操作 我尝试了几个不同的包来实现这一点,我得到了“未定义”的cookie值 如何读取api.js文件中cookie的值 Layout.js useEffect(() => { document.cookie = 'tagrid=322323932; path=/' }) const bodyParser = require(&q
api.js
文件中cookie的值
Layout.js
useEffect(() => {
document.cookie = 'tagrid=322323932; path=/'
})
const bodyParser = require("body-parser");
var cookieParser = require("cookie-parser");
var express = require('express');
const app = express();
app.use(cookieParser());
app.get('/', function(req, res){
console.log('Cookies: ', req.cookies)
});
//Here we are configuring express to use body-parser as middle-ware.
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.listen(4000,() => {
console.log("Started on PORT 4000");
})
页面/api.js
// import cookies from 'next-cookies'
import cookieCutter from 'cookie-cutter'
import Cookies from 'cookies'
// const cook = Object.keys(cookies).map((name) => cookies[name].toString())
export default async (req, res) => {
const { method, body } = req
if (method === 'POST') {
res.statusCode = 200
res.setHeader('Content-Type', 'application/json')
res.end(
JSON.stringify({
msg: body,
}),
)
try {
const cook = cookies.get('tagrid')
// read cookie value
console.log('cook', cook)
} catch (error) {
console.error(error)
}
} else {
res.status(200)
}
}
express.js
useEffect(() => {
document.cookie = 'tagrid=322323932; path=/'
})
const bodyParser = require("body-parser");
var cookieParser = require("cookie-parser");
var express = require('express');
const app = express();
app.use(cookieParser());
app.get('/', function(req, res){
console.log('Cookies: ', req.cookies)
});
//Here we are configuring express to use body-parser as middle-ware.
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.listen(4000,() => {
console.log("Started on PORT 4000");
})
cookie解析器旨在用作快速中间件,但大多数中间件也可以直接用作函数
通常,您会在express中使用它,如下所示:
app.use(cookieParser());
但是如果您仔细想想,app.use会接受一个函数,并将参数req、res、next
传递给该函数。您还可以传递它req、res
,以及回调函数(回调函数不接收任何参数)
要在服务器端脚本中使用cookie解析器,请执行以下操作:
从“cookie解析器”导入{cookieParser}
导出默认异步(req,res)=>{
常量回调=()=>{
const cook=req.cookies['tagrid'];
控制台日志(库克);
};
cookieParser()(req、res、回调);
};
我没有答案,但可能有一个有用的提示:并非所有cookie都可以通过JavaScript读取。例如,我在express会话中设置了一个cookie,并显式地将cookie配置为不可通过JS访问。我认为,这是用户的一个安全层,这样Cookie就不会被恶意脚本“窃取”。(在我的开发工具中,这由标记“http only”表示)您是否尝试打印文档。当i tryhttp only未勾选时,cookiedocument未定义,因此我认为应该可以访问它。因此,我想我需要向服务器发送GET请求以获取cookie?您的api.js文件是客户端文件吗?在我看来,由于req和res参数以及“import”(这是一种节点功能)的使用,它看起来像是服务器端的。我认为在api.js中,您可以使用cookie解析器中间件来允许您通过req.cookies访问cookie。我认为您可以通过执行cookieParser()(req,res,function(req,res){//your function using the cookie via req.cookies})直接使用中间件(无需express)
我的api是服务器端,但是我不确定是否可以实现cookie解析器中间件,或者至少我不确定如何实现,因为它是一个nextjs服务器。