简体   繁体   English

DerbyJS 0.6中的服务器端模型更改事件

[英]Server-side model change event in DerbyJS 0.6

In DerbyJS: 在DerbyJS中:

How do I add event listeners to "The Model", only server side, without having to rely on requests (express middleware)? 如何将事件侦听器添加到“模型”(仅服务器端),而不必依赖请求(表示中间件)?

Related question I've found: How to create server-side application logic on Racer / DerbyJS? 我发现了相关的问题: 如何在Racer / DerbyJS上创建服务器端应用程序逻辑?

Of course I can write an express middleware. 我当然可以写一个快速的中间件。 But the "shared" data model would come in really handy if I could access it without having to rely on a request, and I don't know how to do that without having to put the specific code into the shared codebase . 但是,如果我无需依赖请求就可以访问它,那么“共享”数据模型将非常方便,而且我不知道如何在不必将特定代码放入共享代码库的情况下进行操作

Use case: order processing for e-commerce software 用例:电子商务软件的订单处理

My model could be like this: 我的模型可能是这样的:

{
  orders: [ {
    id: '1',
    products: [ ... ],
    user: [ ... ],
    token: 'stripe credit card token I get from Client here'
  }, {
    ...
  } ]
}

This way the client could place new orders doing 这样客户可以下新订单

model.at('orders').add(myOrder);

And the server could process it by listening for 'insert' events: 服务器可以通过侦听'insert'事件来处理它:

model.on('insert', 'orders', function(captures, index, newOrders) {
  newOrders.forEach(processOrder);
})

Yes you can!! 是的你可以!! :) :)

You have 2 options. 您有2个选择。

Option 1) 选项1)

Use app.serverUse to include a server side script, or use the store.js if you have used yo derby-generator. 使用app.serverUse包括服务器端脚本,如果使用过yobyby-generator,则使用store.js。 There you can : 在那里您可以:

var model = dbStore.createModel();
model.subscribe("orders", function(){
  model.on("insert", "orders.**", function() {
   ...
  });
});

Option 2) 选项2)

Using https://github.com/derbyparty/derby-hook 使用https://github.com/derbyparty/derby-hook

dbStore.hook('create', 'orders', function(id, doc, session, backend) {
  var model = dbStore.createModel();
  var $order = model.at('orders.'+ id);
   ...
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM