ApostropheCMS:如何从浏览器向服务器发送事件

时间:2018-04-01 19:06:05

标签: node.js apostrophe apostrophe-cms

我是Apostrophe的新手,我无法找到客户端和服务器之间通信的解决方案。

我想从我的MySQL数据库中获取一些数据到我的ApostropheCMS(我有一个超过50k行的大型数据库)。但我无法找到一种方法,如何在浏览器和服务器之间进行通信。

如果我从客户端发出一个事件,它只会在浏览器中触发,但不会在服务器端触发。

我无法在文档中找到任何答案,所以我真的需要帮助。

感谢所有答案

1 个答案:

答案 0 :(得分:2)

apos.emit机制只是一个简单的事件总线(想想jQuery事件),可以在浏览器或服务器中使用,而不是在它们之间。

对于浏览器和服务器之间的消息传递,您当然可以访问jQuery和Express的所有常用机制,但有一些细节需要注意:

  • 在服务器端,在一个模块中设置路由的最简单方法通常是使用route方法:

self.route('post', 'do-cool-thing', function(req, res) { // here you can access req.body in the normal Express way, then... return res.send({ some: data, as: json }); }

如果您的模块被调用nifty,则此路线的网址将为/modules/nifty/do-cool-thing

但是,您也可以访问{app}对象self.apos.app。所以你可以写:

self.apos.app.post('/do-cool-thing', function(req, res) { ... });

创建不带/module/module-name前缀的路线。

在浏览器方面,您可以通过$.post$.ajax和朋友的常规方式进行通信。或者,您可以使用我们的$.jsonCall插件:

$.jsonCall('/do-cool-thing', { some: data, sentAs: json, for: you }, function(data) { // JSON response from the server, already parsed for you }, function(err) { // Oh dear, a communications error });

要记住的一件重要事情是Apostrophe内置CSRF保护,以防止第三方网站欺骗用户在您的网站上采取行动。如果您使用jQuery的AJAX方法,包括我们的jsonCall插件,您将自动参与并且没有任何问题。如果您使用其他内容,例如fetch,或者希望为世界其他地方创建API,那么您需要了解这一点并添加CSRF例外。

有关详细信息,请参阅contact forms tutorial,其中详细介绍了这一点。