在我的 Next 14 应用程序的 server.js 文件中,我有:
// Middleware to extract tenant from subdomain
server.use((req, res, next) => {
const hostname = req.hostname;
const subdomain = hostname.split('.')[0]; // Assumes format `tenant.domain.com`
res.cookie('tenant', subdomain, {
httpOnly: false,
path: '/',
secure: true,
sameSite: 'strict',
domain: `.localhost:${port}`,
});
next();
});
我正在尝试通过 API 路径访问该 cookie
import { NextApiRequest, NextApiResponse } from 'next';
import { NextResponse } from 'next/server';
import Cookies from 'js-cookie';
type NextApiRequestWithTenant = NextApiRequest & { tenant: string };
export async function GET(req: NextApiRequestWithTenant, res: NextApiResponse) {
// Assuming middleware adds tenant to the request object
const tenant = Cookies.get('tenant');
console.log('[TENANT API]', Cookies);
return NextResponse.json({ tenant, data: 'some data' });
}
但是我得到了一个空的对象来存放我的饼干。
我已经验证在 server.js 中间件上设置了 cookie,但我不确定为什么我无法在 API 路由上访问该 cookie。
修复了它,我试图使用客户端 cookie 库访问服务器 cookie, 将我的 API 路线更改为:
import { NextApiRequest, NextApiResponse } from 'next';
import { NextResponse } from 'next/server';
type NextApiRequestWithTenant = NextApiRequest & { tenant: string };
export async function GET(req: NextApiRequestWithTenant, res: NextApiResponse) {
// access cookie and get tenant
const tenantCookie = req?.cookies?._parsed?.get('tenant').value;
return NextResponse.json({ tenant: tenantCookie, data: 'some data' });
}