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,其中对此进行了详细介绍。
我是 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,其中对此进行了详细介绍。