2011-09-23 44 views
8

Ok vì vậy tôi có một đối tượng JS đang được POST qua AJAX đến phần phụ trợ nodejs. Tôi muốn chèn đối tượng js này trực tiếp vào db mongoose của tôi khi các khóa đối tượng đã khớp hoàn toàn với lược đồ db.Mongoose: Chèn đối tượng JS trực tiếp vào db

Tôi hiện có này (không phải năng động và quá phức tạp):

app.post('/items/submit/new-item', function(req, res){ 
    var formContents = req.body.formContents, 
     itemModel = db.model('item'), 
     newitem = new itemModel(); 

    newitem.item_ID   = ""; 
    newitem.item_title  = formContents.item_title; 
    newitem.item_abv  = formContents.item_abv; 
    newitem.item_desc  = formContents.item_desc; 
    newitem.item_est  = formContents.item_est; 
    newitem.item_origin  = formContents.item_origin; 
    newitem.item_rating  = formContents.item_rating; 
    newitem.item_dateAdded = Date.now(); 

    newitem.save(function(err){ 
     if(err){ throw err; } 
     console.log('saved'); 
    }) 

    res.send('item saved'); 
}); 

Nhưng muốn cắt nó xuống để một cái gì đó như thế này (sexy và năng động):

app.post('/items/submit/new-item', function(req, res){ 
    var formContents = req.body.formContents, 

    formContents.save(function(err){ 
     if(err){ throw err; } 
     console.log('saved'); 
    }) 

    res.send('item saved'); 
}); 
+2

* "Ok vì vậy tôi có một đối tượng JS đang được POST qua AJAX cho phụ trợ nút. Tôi muốn chèn đối tượng js này trực tiếp vào db mongoose của tôi khi các khóa đối tượng đã khớp hoàn toàn với lược đồ db "* Âm thanh như một ** ** tuyệt vời vector cho một số loại tấn công tiêm, tương tự như [SQL injection] (http://en.wikipedia.org/wiki/SQL_injection). Luôn luôn tốt hơn để xử lý và xác thực dữ liệu của bạn trên máy chủ trước khi gửi. Khách hàng không thể tin cậy được. –

+2

Vâng tôi biết. Đây là một trường hợp thử nghiệm. Đó không phải là câu hỏi của tôi. – wilsonpage

+0

Vì vậy, nó là một trường hợp thử nghiệm xấu, như bạn nên LUÔN xác nhận dữ liệu :) Tôi hiện đang làm việc trong một bối cảnh tương tự và thử nghiệm thành công validate.js để xác nhận dữ liệu –

Trả lời

9

Nếu bạn sử dụng plugin như thế này với mongoose (http://tomblobaum.tumblr.com/post/10551728245/filter-strict-schema-plugin-for-mongoose-js), bạn có thể đặt cùng một mảng vào biểu mẫu của mình, như newitem[item_title]newitem[item_abv] - hoặc item[title]item[abv]

Bạn cũng có thể chuyển toàn bộ req.body nếu các phần tử khớp với nhau. Điều đó MongooseStrict plugin sẽ lọc ra bất kỳ giá trị nào không được đặt rõ ràng trong giản đồ của bạn, nhưng nó vẫn để lại các loại kiểm tra và xác thực lên đến mongoose. Với các phương thức xác nhận hợp lệ được đặt trong lược đồ của bạn, bạn sẽ được an toàn khỏi bất kỳ cuộc tấn công tiêm nào.

EDIT: Giả sử bạn đã triển khai plugin, bạn sẽ có thể sử dụng mã này.

app.post('/items/submit/new-item', function(req, res){ 
    new itemModel(req.body.formContents).save(function (e) { 
    res.send('item saved'); 
    }); 
}); 
+0

nhờ phương pháp bạn mô tả làm việc mà không yêu cầu plugin. Tôi chắc chắn sẽ cần phải thực hiện nó tại một ngày nữa để đảm bảo an ninh mặc dù. Điểm trong lược đồ là gì nếu chúng có thể bị ghi đè như thế này? Bạn sẽ đề xuất phương pháp xác thực đầu vào nào khác? – wilsonpage

+0

Các lược đồ hoạt động rất nhiều trong mongoose, quan trọng nhất là chúng lưu các loại đúng vào mongodb nhưng chúng cũng cho phép bạn thiết lập xác thực, mặc định và các thứ ODM khác. Tại thời điểm cấp cao nhất của một tài liệu mongoose về cơ bản được xử lý như kiểu "Mixed" (chấp nhận bất cứ thứ gì và chỉ thực hiện công việc khi thuộc tính được cập nhật khớp với thuộc tính trong lược đồ) - các plugin plugin mong muốn * chỉ * chấp nhận các thuộc tính trong lược đồ –

+0

Xuất phát từ một nền tảng mySQL, tôi đang cố gắng để hiểu được mongoose đầy đủ. Các tài liệu không rõ ràng với tôi. Bạn có thể giới thiệu một số tài nguyên hoặc ví dụ. Tôi không muốn làm gì tiên tiến. – wilsonpage

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