2

如果客户端上当前不存在 ajs_anonymous_id,是否有人在 SSR (nextjs) 中设置它?

我需要在 Next.Js 中的 SSR 渲染期间“读取” ajs_anonymous_id(细分分析)cookie,但当然存在该 cookie 尚不存在的情况,即......人之前没有访问过我的网站并且因此永远不要这样做......但是,因为我需要在 SSR 端......我希望有一个过程我可以在服务器端“设置”以便我可以使用它,然后在客户端上拥有它太……那么……

客户访问页面

有 ajs_anonymous_id cookie,很酷,使用它并做一些显示的事情....

没有 ajs_anonymous_id,我播种 ajs_anonymous_id(放置一个 cookie)然后做一些显示的事情。

页面加载.. 我的分析文件(通过包含在字体末端加载)看到已经有一个 ajs_anonymous_id cookie,很酷。

任何人都有这个例子或如何实现它?

4

1 回答 1

2

是的 - 似乎有一个包和方法就是为了这个。


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,我希望您必须摆脱他们的服务器默认实现并构建一个包装器以允许您添加这种类型的中间件。

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

希望这有助于您入门!

于 2021-06-09T12:15:06.257 回答