我想知道是否有办法从远程方法中返回特定的HTTP状态代码。
我可以看到有一个回调函数,我们可以传递一个错误对象,但是我们如何定义HTTP状态代码呢?
答案 0 :(得分:20)
如果您希望使用HTTP状态代码来通知错误,可以在远程方法回调方法中传递错误:
$window.location.href = "/your/path/here";

您可以在此处找到有关错误对象的更多信息:Error object
如果您希望在不使用错误的情况下更改HTTP响应状态,可以使用#danielrvt或#superkhau定义的两种方法之一。要获取#superkhau提到的请求对象的引用,在方法注册中,您可以定义一个将传递给远程方法的附加参数。见HTTP mapping of input arguments
答案 1 :(得分:1)
如果您只需要修改响应状态,请执行以下操作:
ctx.res.status(400);
return cb(null);
答案 2 :(得分:1)
使用async
远程方法函数时,需要让async
函数抛出任何遇到的错误,而不是试图捕获它们并调用return
。通过调用return
,您告诉LoopBack它应该像成功一样进行响应。
这是一个示例工作结构。
AdminDashboard.login = async(body) => {
let username = body.username
let password = body.password
await isDomainAdmin(username, password)
}
AdminDashboard.remoteMethod(
'login',
{
http: {path: '/login', verb: 'put'},
consumes: ['application/json'],
produces: ['application/json'],
accepts: [
{arg: 'body', type: 'Credentials', http: {source: 'body'}}
]
}
)
只要确保您调用的任何内部函数(如isDomainAdmin
)也直接抛出错误,或者捕获它们并将其转换为错误对象,如下所示:
{
statusCode: 401,
message: 'Unauthorized'
}
err.statusCode
是您要LoopBack返回的HTTP状态代码。
答案 3 :(得分:0)
让我们假设您拥有一个CoffeShop模型,并且如果该商品不在您的数据库中,则希望发送状态404。
CoffeeShop.getName = function(req, res, cb) {
var shopId = req.query.id;
CoffeeShop.findById(shopId, function(err, instance) {
if (instance && instance.name){
var response = instance.name;
cb(null, response);
}
else {
res.status(404);
cb(null);
}
});
}
CoffeeShop.remoteMethod(
'getName',
{
http: { path: '/getname', verb: 'get' },
accepts: [{arg: 'req', type: 'object', http: { source: 'req' }},
{ arg: 'res', type: 'object', http: { source: 'res' }}],
returns: { arg: 'name', type: 'string' }
}
);
答案 4 :(得分:-1)
您可以像在ExpressJS中一样返回任何状态代码。
...
res.status(400).send('Bad Request');
...