【发布时间】:2015-05-15 20:05:32
【问题描述】:
我设置了一个 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);
*/}
}
【问题讨论】:
-
这句话真的很难理解,伙计。请发布一些代码...如果订单处理正确,供应商是否会发布到您的 API 并获得回复,或者他们是否定期“检查”以查看订单是否已处理?我真的不明白这里的整个工作流程
-
当我尝试这样做时,我显然很累。让它与缓存响应对象一起工作。
-
所有供应商发布到我的 IP 并立即得到回复。他们中的一些人会定期检查状态更新,而一些我会在状态更新时发布给他们。我遇到问题的供应商想发布但在商店处理订单之前没有收到 http 响应
-
现在一切正常吗?
-
是的。很抱歉浪费时间。在搜索数组时,我没有包含 [0] 以返回匹配 id 的第一顺序,因此它返回了另一个数组而不是对象。
标签: node.js caching response forward restify