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

ApostropheCMS: How to emit Events from Browser to Server

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

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

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

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

感谢大家的回答

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,则此路线的 URL 将为 /modules/nifty/do-cool-thing

但是,您也可以访问 self.apos.app,这是 Express 应用程序对象。所以你可以这样写:

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 具有 built-in CSRF 保护,以防止 third-party 网站欺骗用户在您的网站上采取行动。如果你使用 jQuery 的 AJAX 方法,包括我们的 jsonCall 插件,你将自动参与并且没有问题。如果您使用其他东西,例如 fetch,或者希望为世界其他地方创建一个 API,那么您需要注意这一点并添加 CSRF 例外。

有关详细信息,请参阅 contact forms tutorial,其中对此进行了详细介绍。