如果用户没有Next.js应用程序的cookie,是否从客户端上的SSR设置段ajs_anonymous_id?

gzszwxb4  于 2023-03-02  发布在  其他
关注(0)|答案(1)|浏览(131)

如果客户端上当前不存在ajs_anonymous_id,有人在SSR(Next.js)中设置了它吗?
我需要“读取”ajs_anonymous_id(细分分析)在Next.Js中呈现SSR期间的cookie,但当然也有该cookie不存在的情况,即...人以前从未访问过我的网站,因此从未访问过它...但是,由于我需要在SSR方面.....我希望有一个过程,我可以在服务器端“设置它”,以便我可以使用它,然后有它的客户太...所以...
客户访问页面
ajs_anonymous_id cookie,很酷,使用它并做一些显示的事情。
没有ajs_anonymous_id,我播种ajs_anonymous_id(放置cookie),然后执行一些显示操作。
页面加载..我的分析文件(通过一个容器加载到字体端)看到已经有一个ajs_anonymous_id cookie,很酷。
有人有这样的例子吗?或者如何实现它?

bvn4nwqk

bvn4nwqk1#

是的-似乎有一个软件包和方法专门用于此。

import Analytics from 'analytics-node'

// if no anonymousId, send a randomly generated one
  // otherwise grab existing to include in call to segment
  let anonymousId
  if (cookies.ajs_anonymous_id) {
    anonymousId = cookies.ajs_anonymous_id
  } else {
    anonymousId = = uuid.v4()
    res.cookie('ajs_anonymous_id', anonymousId )
  }

完整的例子,我会参考他们的文档:https://segment.com/docs/guides/how-to-guides/collect-pageviews-serverside/
对于NextJS,我希望您必须摆脱他们的服务器默认实现,并构建一个 Package 器来允许您添加这种类型的中间件。

const express = require('express');
const bodyParser = require('body-parser');
const next = require('next');

const host = process.env.LOCAL_ADDRESS || '0.0.0.0';
const port = parseInt(process.env.NODE_PORT, 10) || 3000;
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev, dir: 'app' });
const handle = app.getRequestHandler();

app.prepare().then(() => {
    const server = express();

    server.use(bodyParser.urlencoded({ extended: false }));
    server.set('trust proxy', true);

    server.use(customMiddleware);

    server.all('*', (req, ...args) => {
        // Log the request only if we need to (we don't log all static asset requests)
        if (req.log) {
            req.log.info('incoming request');
        }

        return handle(req, ...args);
    });

    server.listen(port, host, (err) => {
        if (err) throw err;
        console.log(`> Ready on http://${host}:${port}`);
    });
});

然后使用node app/server启动应用程序
希望这能帮助你开始!

相关问题