2012-10-12 33 views
6

Tôi đang sử dụng Meteor 4.2 (Windows) và tôi luôn nhận được "cập nhật không thành công: 403 - Truy cập bị từ chối. Không thể thay thế tài liệu trong bộ sưu tập hạn chế" khi tôi đang cố gắng để cập nhật một đối tượng trong bộ sưu tập của tôi. Kỳ lạ là tôi không có vấn đề gì với việc chèn mới, chỉ cập nhật không thành công.Meteor: Không thể thay thế tài liệu trong bộ sưu tập bị hạn chế

tôi đã cố gắng để "cho phép" mọi thứ trên bộ sưu tập của tôi:

Maps.allow({ 
    insert: function() { return true; }, 
    update: function() { return true; }, 
    remove: function() { return true; }, 
    fetch: function() { return true; } 
}); 

Nhưng vẫn còn, bản cập nhật này không:

Maps.update({ 
    _id: Session.get('current_map') 
}, { 
    name: $('#newMapName').val() 
}); 

Có điều gì khác tôi có thể kiểm tra? Hoặc có thể mã của tôi là sai? Lần cuối cùng tôi chơi với dự án của tôi là với một phiên bản trước của Meteor (< 4.0).

Cảm ơn sự giúp đỡ của bạn.

PS: Chỉ để biết thông tin, khi tôi cập nhật, bộ sưu tập cục bộ được cập nhật, tôi có thể thấy các thay đổi trong giao diện người dùng. Sau đó rất nhanh nó được hoàn nguyên cùng với thông báo lỗi, vì các thay đổi đã bị từ phía máy chủ từ chối.

Trả lời

8

Được rồi, cú pháp thực sự không chính xác. Tôi không hiểu tại sao vì nó hoạt động tốt trước đây, nhưng dù sao, đây là mã hoạt động tốt:

Maps.update({ 
    Session.get('current_map') 
}, { 
    $set: { 
     name: $('#newMapName').val() 
    } 
}); 
+0

Đó là bit $ set (nội dung cần lưu phải được đặt trong $ set), tôi chỉ gặp sự cố này và cảm ơn câu trả lời của bạn, tôi thấy tai nạn của tôi, cảm ơn :) –

+0

Cảm ơn bạn đã lưu ngày của tôi: D – Nick

0

Có vẻ như nó phải liên quan đến những gì bạn đang lưu trữ trong 'current_map' biến phiên. Nếu nó là một đối tượng db, thì nó có thể trông giống như {_id:<mongo id here>} mà sẽ làm cho công cụ tìm kiếm cập nhật hoạt động đúng cách.

Tôi chạy vào vấn đề tương tự, và tìm thấy những điều sau đây để làm việc

Blocks.update {_id:block_id}, {$set: params} 

nơi params là một hash của tất cả các bit i muốn cập nhật và block_id là đối tượng id Mongo của Khối i đang cố cập nhật.

Lưu ý của bạn về cập nhật phía máy khách (mà nhấp vào cập nhật và sau đó hoàn nguyên) là hành vi được mong đợi. Nếu bạn xem tài liệu của họ theo số Data and Security section:

Meteor có một thủ thuật dễ thương. Khi một khách hàng phát hành một ghi vào máy chủ, nó cũng cập nhật bộ nhớ cache cục bộ của nó ngay lập tức, mà không cần chờ phản hồi của máy chủ. Điều này có nghĩa là màn hình sẽ vẽ lại ngay lập tức. Nếu máy chủ chấp nhận bản cập nhật - những gì nên xảy ra hầu hết thời gian trong một ứng dụng hoạt động đúng - sau đó khách hàng có một bước nhảy về sự thay đổi và không phải đợi cho chuyến đi khứ hồi để cập nhật màn hình riêng của mình. Nếu máy chủ từ chối thay đổi, Meteor sẽ vá cache của máy khách với kết quả của máy chủ.

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