我正在制作电子商务应用(MEAN),并且在制作AJAX http请求时遇到同样的问题。我使用MEAN,单页架构是这个问题的基础。
我已经读过,只有在绝对必要时才会使用http请求,但我想知道它会走多远。我是否应该收集必要的http请求返回的所有信息并使用它来减少进一步的请求,或者这种想法会导致复杂的代码和很少的性能优势?
例如,我有一个发出post
请求的addToCart方法。在post
内,它首先检查product
数据库以确保该项目有足够的库存数量,然后检查user
数据库以确保它在加入之前尚未存在它。
张贴申请:
.post(auth, function(req, res, next){
var newCartItem = {
product: req.body._id,
quantity: req.body.quantity
};
function addCartItem(){
//Checks user.cart.product to ensure that item isn't already in cart
User.update({username: req.payload.username, 'cart.product': {$ne: newCartItem.product}},
{$push: {cart: newCartItem}},
function(err, user){
if(err){return next(err);}
if(!user.nModified){
res.json({message: 'Item is already in your cart.'});
}else{
res.json({message: 'Item added to cart', addedProduct: newCartItem});
}
}
);
}
//Checks product database to ensure sufficient inventory(quantity)
Product.update({_id:req.body._id, quantity: {$gte: req.body.quantity}}, {$inc:{quantity: -req.body.quantity}},
function(err, product){
if(err) {
return next(err);
}else if(product.nModified === 0) {
res.json({message: 'Product no longer has sufficient quantity in stock.'});
}else{
addCartItem();
}
});
如果我确实想要最小化http请求,我可以让Product.update
回调将产品信息返回给客户端(res.json
内),然后可以使用在发出服务器请求之前,对客户端上该特定产品的库存进行后续检查。此外,如果库存充足且产品已添加到购物车,我可以让User.update
回调返回user.cart
,以便客户端知道,并验证正在添加的项目是在发送任何后续请求之前,不在用户的购物车中。
起初这类问题似乎是一个孤立的案例,直到我开始看到它随处可见。我知道这有点基于意见,但我在很多情况下遇到了这个基本问题,我冒着被焚烧的风险。
重申一下,这是我的问题: 我是否应该收集必要的http请求返回的任何可能的信息并使用它来减少进一步的请求,或者这种想法会导致复杂的代码和很少的性能优势?
干杯! 泰勒
答案 0 :(得分:1)
您在MEAN堆栈上,这意味着您需要通过webservices(主要是REST)将数据从后端导出到前端,并且您可以通过在访问某些路由时生成json对象来轻松实现这一点创建RESTful API
该API将通过$ http或$ resource模块在AngularJS中生成的SPA中使用。(非内置的angular-resource)。
无论如何,您需要配置状态(而不是路由),以便您的状态机在应用程序中调用与请求状态相关的数据,默认情况下它是异步执行的。
如果你真的想"停止击中后端"使用您的AJAX,您需要使用$ provider,因为它只运行一次,而应用程序将从该数据提供程序获取数据,实际上是从Web服务获取数据。(您需要这样做)。 />
您还希望减少SPA中的POST方法,因为无法减少负载(除非您正在寻找基础架构解决方案AKA nginx作为事实解决方案..)。
祝你好运..