Javascript 基于客户端主机名NextJS动态生成robot.txt和sitemap.xml

Javascript 基于客户端主机名NextJS动态生成robot.txt和sitemap.xml,javascript,node.js,reactjs,next.js,sitemap,Javascript,Node.js,Reactjs,Next.js,Sitemap,我有一个非常独特的要求; 我们需要动态生成两个文件,使用两种不同的内容类型(xml和txt)为robots.txt和sitemap.xml服务 这里需要注意的是,这两个文件都必须从根目录提供,并且应该动态提供,因为我们需要检查应用程序的主机名,并根据主机名呈现这两个文件 示例不同的主机可以有不同的站点地图;因此,需要从服务器获取站点地图,并将它们相应地呈现给客户端 class Sitemap extends React.Component { static async getInitialPr

我有一个非常独特的要求; 我们需要动态生成两个文件,使用两种不同的内容类型(xml和txt)为robots.txt和sitemap.xml服务

这里需要注意的是,这两个文件都必须从根目录提供,并且应该动态提供,因为我们需要检查应用程序的主机名,并根据主机名呈现这两个文件

示例不同的主机可以有不同的站点地图;因此,需要从服务器获取站点地图,并将它们相应地呈现给客户端

class Sitemap extends React.Component {

static async getInitialProps({ res }) {

    if(res) {

        const hostName= res.headers.host;
        console.log(`request_source ${hostName}`);

       // do some other works and get data and render this accordingly 

        if (isSubDomain(hostName)) {

             // just for testing I have hardcoded this
            const textFile = () => {
                return `User-agent: *
                    Disallow: /`;
            };
            res.setHeader("Content-Type", "text/plain;charset=UTF-8");
            res.write(textFile());
            res.end();

        } else {

            const textFile = () => {
                return `User-agent: *
                    Disallow:`;
            };
            res.setHeader("Content-Type", "text/plain;charset=UTF-8");
            res.write(textFile());
            res.end();

        }
    }
}} export default Sitemap;
我使用getInitialProps方法实现了这一点,但不幸的是主机名没有被访问,因为这段代码是在服务器端构建的,而不是在客户端

class Sitemap extends React.Component {

static async getInitialProps({ res }) {

    if(res) {

        const hostName= res.headers.host;
        console.log(`request_source ${hostName}`);

       // do some other works and get data and render this accordingly 

        if (isSubDomain(hostName)) {

             // just for testing I have hardcoded this
            const textFile = () => {
                return `User-agent: *
                    Disallow: /`;
            };
            res.setHeader("Content-Type", "text/plain;charset=UTF-8");
            res.write(textFile());
            res.end();

        } else {

            const textFile = () => {
                return `User-agent: *
                    Disallow:`;
            };
            res.setHeader("Content-Type", "text/plain;charset=UTF-8");
            res.write(textFile());
            res.end();

        }
    }
}} export default Sitemap;