我将如何去使用Node.js的前端和WordPress作为后端?

我曾经想过使用Wordpress作为CMS的后端,因为很多人都知道这一点,并且很容易使用,然后使用Node.JS作为前端。 你现在可能在想,为什么我想要这样做,有什么好处?

我想使用websockets,Node.JS的美妙的Socket.io库提供了漂亮的跨浏览器websocket支持。 本质上,我想要一个用户来到一个网站,一个websocket被创build,然后内容被作为JSONasynchronous提供给前端,然后在前端解码,而不刷新页面。

有效地,我使WordPress成为一个实时的CMS。 你访问一个网站,但是你点击的每个链接都会以JSON的forms获取页面,并通过websocket返回,以保存多个请求,当然还有页面大小。

我如何去获取Node.JS与MySQL数据库交谈,提取信息,然后显示它? 任何教程,资源和其他有用的提示将不胜感激。 我的一些同事也想知道同样的事情,所以我认为答案对每个人都是很大的帮助。

确切地说,不能将Node.js用于前端解决scheme,因为它运行在服务器上,而不是浏览器上(像其他服务器端语言,比如PHP,JSP等)。

但是,您可以使用jQuery或任何其他Javascript库创build所描述的解决scheme,只需使用Socket.IO实现数据传输。 在服务器端,你需要一些东西来处理websocket,所以最原始的方式是使用Node.js,但是由于你想使用Wordpress,它变得非常复杂,因为Wordpress并不打算在你所描述的方式,所以我恐怕你必须从Node写入你的CMS。

另外,你描述的方式有一个巨大的缺陷。 search引擎抓取工具仍然无法parsing和运行Javascript,所以如果所有的内容都是dynamic加载的,Google和其他用户似乎都是空的,所以不可能在search结果中使它变得毫无用处。

对于MySQL和Node的其他模块,您应该检查NPMregistry和Node模块页面 。

编辑 Dwayne在评论中解释他的解决scheme后,这是我该怎么做:

  1. 我会使用jQuery的前端。 使用.on()绑定document ,并将select器设置为“a”,以便网页上的每个锚都会触发处理程序。
  2. 该处理程序parsinga.href属性,并确定它是否是一个外部链接,不应该由Javascript处理,或者它是到下一页的链接,文章等。您可以通过调用e.preventDefault()处理程序中的e.preventDefault() ,防止浏览器redirect到该位置。
  3. 然后,处理程序将通过调用.getJSON()到基于文章的URL来获取JSON中的内容。 最简单的方法是通过.htaccess将某个模式(如www.domain.com/api等所有url)redirect到Node服务,以防止跨域问题。
  4. 节点然后会看到请求,提取参数并找出用户想要的。 然后用这个模块连接到MySQL数据库(它可以很简单)并返回格式为JSON的相应内容。 不要忘记将Content-Type标题设置为“application / json”。
  5. jQuery获取响应,找出请求的types并相应地更新内容。 利润。

正如你所看到的,在这种情况下我不会使用WebSocket,因为你不会从中受益。 它们主要是用于小型实时更新(没有巨大的HTTP头来减less带宽),这是双向的。 这意味着服务器也可以将数据推送到浏览器,而不需要浏览器请求。 在博客上下文中,这不是必需的,你不会有太多的请求,所以带宽的差异不会被注意到。 但是,如果您想将其用于教育目的,基本上用SocketIO取代getJSON部分,但我不确定Apache是​​否支持代理WebSocket。 关于SocketIO基础知识的额外信息在这里 。

编辑:我忽略了“在前端使用Node.js”的部分。 正如Vahur Roosimaa所说,Node.js在服务器端(把它想成Nginx / Apache + PHP的组合)。 Node不是像jQuery这样的前端库。 如果你想,你可以使用它只是为了websockets的function(我build议使用Socket.IO )。

关于Node.js和MySQL的好教程:

http://www.giantflyingsaucer.com/blog/?p=2596
http://mclear.co.uk/2011/01/26/very-simple-nodejs-mysql-select-query-example/
http://www.hacksparrow.com/using-mysql-with-node-js.html

这个SO问题可能也有帮助: MySQL与Node.js

还要检查node-mysql的github repo中的例子 。

如果你想要像ORM这样更高级的东西,我推荐Sequelize 。
另一个很好的问题是: 我应该使用哪个ORM作为Node.js和MySQL?

你应该检查一下Wordscript ,我最近添加了一个Node JS的例子,它可以作为一个简单的前端从Wordpress数据库中进行基本的检索。

它使用一个通用的mysql库作为节点,并从get参数中生成MySQL查询,并在从数据库中检索数据时生成数据; 包括标签。

Wordscript旨在使后端/前端开发人员免于被迫使用Wordpress PHP代码库,但仍然允许在需要时使用Wordpress的pipe理界面(并谨慎地这样做)。 API是用Ruby和PHP编写的,它们都返回JSON订阅源,其function通常与节点版本的function相同; 所以在脚本语言可用的情况下这是一个额外的选项。

你有一个select,如果你想有一个WordPress作为内容pipe理系统,并保持其pipe理界面,是写你的wordpress模板输出JSON而不是HTML。

与Wordscript相比,这是更具体的解决scheme,因为您将需要为每个您想要的模板/数据编写JSON输出。 好处是您可以专门为您的需要创buildJSON。

在节点端,你写一个小型的服务器,将使用JSON,让你使用任何你想要的JavaScript模板语言。 Nodejs也可以帮助你提高性能,因为你可以把渲染的内容和/或JSON输出保存到内存中,从而节省你往返wordpress模板的时间。

我写了一篇关于这个的博客,其中描述了更多使用nodejs和wordpress的好处。

http://www.1001.io/improve-wordpress-with-nodejs/