2015-03-20 21 views
5

Tôi đang tìm cách tùy chỉnh mã phản hồi và tiêu đề StrongLoop LoopBack HTTP.StrongLoop Loopback: Cách tùy chỉnh mã phản hồi HTTP và tiêu đề

Tôi muốn tuân thủ một số quy tắc kinh doanh của công ty liên quan đến REST API.

Trường hợp điển hình là, đối với mô hình được mô tả trong JSON, để HTTP phản hồi yêu cầu POST với mã 201 + header Content-Location (thay vì mã phản hồi mặc định của loopback 200 không có tiêu đề Content-Location).

Có thể thực hiện điều đó bằng LoopBack không?

+0

Vì vậy .. Tôi nghĩ bạn có thể làm điều này với một [phần mềm trung gian] (docs.strongloop.com/display/public/LB/Defining+middleware), nhưng tôi đang gặp khó khăn khi làm việc lên một ví dụ. Tôi sẽ tiếp tục cố gắng. – jakerella

Trả lời

4

Thật không may là cách làm điều này hơi khó khăn vì LoopBack không dễ dàng có móc để sửa đổi tất cả các câu trả lời sắp ra khỏi API. Thay vào đó, bạn sẽ cần phải thêm một số mã để mỗi mô hình trong một kịch bản khởi động mà móc trong việc sử dụng phương pháp afterRemote:

Bên /server/boot/ thêm một tập tin (tên không quan trọng):

module.exports = function(app) { 

    function modifyResponse(ctx, model, next) { 
    var status = ctx.res.statusCode; 
    if (status && status === 200) { 
     status = 201; 
    } 
    ctx.res.set('Content-Location', 'the internet'); 
    ctx.res.status(status).end(); 
    } 

    app.models.ModelOne.afterRemote('**', modifyResponse); 
    app.models.ModelTwo.afterRemote('**', modifyResponse); 
}; 
+1

Cảm ơn bạn jakerella, nó hoạt động rất tốt và phù hợp với nhu cầu của tôi! Tôi áp dụng nó cho tất cả các mô hình ứng dụng của tôi như mô hình ứng dụng 'for (var model in app.models) này. Mô hình [model] .afterRemote ('**', modifyResponse); ' – Nicolas

+1

Để làm điều gì đó cho tất cả các mô hình, có vẻ như bạn có thể đi theo cách này: http://docs.strongloop.com/display/public/LB/Remote+methods#Remotemethods-Formattingremotemethodresponses – neemzy

+2

'ctx.res.status (trạng thái) .end();' không phải là một thực hành tốt, bạn nên gọi 'next()' và để chuỗi remoteMethod tiếp tục. –

Các vấn đề liên quan