当使用单页框架(如AngularJS)时,如何使用NodeJS解决社交共享和搜索引擎问题

当使用单页框架(如AngularJS)时,如何使用NodeJS解决社交共享和搜索引擎问题,angularjs,node.js,optimization,seo,Angularjs,Node.js,Optimization,Seo,我在AngularJS中读到了一篇关于社会共享问题的文章,以及如何使用Apache作为代理来解决这些问题 该解决方案适用于小型网站。但是,如果一个web应用程序有20多个不同的页面,我必须为所有页面编写url并创建静态文件。此外,通过使用PHP和Apache向应用程序添加了不同的堆栈 我们可以使用NodeJS作为代理并重新编写url吗?方法是什么? 有没有办法最小化静态文件的创建? 有没有一种方法可以同时删除代理、url重写和静态文件?例如,在我们的NodeJS应用程序中检查用户代理,如果是fa

我在AngularJS中读到了一篇关于社会共享问题的文章,以及如何使用Apache作为代理来解决这些问题

该解决方案适用于小型网站。但是,如果一个web应用程序有20多个不同的页面,我必须为所有页面编写url并创建静态文件。此外,通过使用PHP和Apache向应用程序添加了不同的堆栈

我们可以使用NodeJS作为代理并重新编写url吗?方法是什么? 有没有办法最小化静态文件的创建? 有没有一种方法可以同时删除代理、url重写和静态文件?例如,在我们的NodeJS应用程序中检查用户代理,如果是facebook bot或twitter等,我们使用请求模块下载我们的页面并返回原始html代码,这是一个合理的解决方案吗?
通常,当有人在社交网络中共享url时,该社交网络会请求该页面生成预览/缩略图。 最有可能的是,这些scraper不会运行javascript,因此它们需要该页面的静态html版本。 这同样适用于搜索引擎,尽管谷歌和其他公司已经开始支持javascript网站

这里有一个很好的SPA方法,它仍然支持刮刀:

使用angular中的history.pushState在应用程序中导航时获取虚拟URL,即不带 服务器端node.js或任何,检测请求是否来自用户或机器人,例如,使用此库检查用户代理 如果请求url有一个文件扩展名,那么它可能是一个静态资源请求images、.css、.js、代理来获取静态文件 如果请求url是一个页面,对于真实用户,如果url是一个页面,即非静态资源,则始终为加载angular app pro的index.html提供服务提示:将此文件缓存在内存中 如果请求url是一个页面,请提供请求url的预呈现版本,他们不会运行javascript,这是最难的部分。注意:ReactJS使这个问题变得更简单,您可以使用一个服务,就像他们会负责加载您的angular应用程序一样,如果您好奇的话,可以将每个页面保存为html,他们在内存中使用一个名为PhantomJS的无头/虚拟浏览器来实现这一点,模拟真实用户单击“另存为…”会做什么,然后您可以请求并代理这些预呈现的页面到机器人请求,如社交网络刮板。如果需要,可以在自己的服务器上运行prerender实例。 我描述的所有服务器端流程都是通过prerender在这个express.js中间件中实现的: 即使您不喜欢prerender,也可以将该代码用作实现指南

或者,这里有一个仅使用nginx的实现示例: