我是Apostrophe的新手,我无法找到客户端和服务器之间通信的解决方案。
我想从我的MySQL数据库中获取一些数据到我的ApostropheCMS(我有一个超过50k行的大型数据库)。但我无法找到一种方法,如何在浏览器和服务器之间进行通信。
如果我从客户端发出一个事件,它只会在浏览器中触发,但不会在服务器端触发。
我无法在文档中找到任何答案,所以我真的需要帮助。
感谢所有答案
答案 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,其中详细介绍了这一点。