Node.js Restify在值更改时发送响应

时间:2015-05-15 10:52:19

标签: node.js caching response forward restify

我有一个nodejs + restify服务器设置。它用于在线订购api,接受来自不同供应商的在线订单,并将它们转发到相关商店和pos终端。

这适用于大多数供应商。我遇到了想要发布到我的服务器的特定供应商的问题,我只应该在商店处理订单时使用http.200回复​​。这在繁忙时段期间大约需要5秒钟。

目前该流程的工作原理如下:  1.供应商向API发布交易。  2. API将订单写入数据库  3.定期存储新订单和下载(如果存在)。  4.将更新订单状态存储为已处理完成。  5. Api通过供应商更新订单状态。

我想要实现的是供应商将发布到/ orders / {orderid},但在商店发布到/ status / {orderid}之前我不会发回回复

我尝试使用orderid作为键创建一个键值存储,并且响应对象具有值,但我似乎无法使用此方法发送响应。

代码: 是什么:

//Vendor posts new order
//Body contains json data { 'orderid' : 'xxxx', 'storeid': 'ABC', 'lines' : []}
server.post('/order/:vendor',function(req,res,next){
    //write order to database on success call res.send(200);
});

//Vendor queries order status
server.get('/orderstatus/:orderid',function(req,res,next){
    //read order status from database on return result call res.send({'orderid' : 'xxxx', 'status': 5});
}

//Store checks for orders
server.get('/store/orders/:storeid',function(req,res,next){
    // get all new orders (status = 0) and return with res.send({'orders': [{ 'orderid' : 'xxxx', 'storeid': 'ABC', 'lines' : []}]});
}

//Store Updates order status
server.put('/orderstatus/:vendor/:orderid/:status',function(req,res,next){
    /*update order with new status. if vendor requires post from this api then use client to
     update status with vendor. call res.rend(200);
    */
}

//THIS IS FOR NEW CLIENT
var ordersforyyy =[]
//changed Vendor post to:
server.post('/order/:vendor',function(req,res,next){
    if (req.params.vendor === 'yyy') {
        //write order to database. then:
        ordersforyyy.push({orderid : req.body.orderid, response: res});
        //Do not send response 200
    }
    else {//write order to database on success call res.send(200);}
});

server.put('/orderstatus/:vendor/:orderid/:status',function(req,res,next){
    if (req.params.vendor === 'yyy') {
          var response = orders.filter(function(item){ return item.orderid === req.params.orderid; })[0];
          response.response.send(200);
    }
    else {
    /*update order with new status. if vendor requires post from this api then use client to
     update status with vendor. call res.rend(200);
    */}
}

1 个答案:

答案 0 :(得分:0)

在搜索数组时,我没有包含[0]来返回第一个匹配的id,所以它返回了另一个数组而不是对象