2012-04-18 27 views
6

Các đoạn mã sau:Làm thế nào tôi có thể tiết kiệm một javascript lưu trữ trong MongoDB từ Node.js

var mongo = require('mongodb'); 

var db = new mongo.Db('test', new mongo.Server('127.0.0.1', 27017, {})); 

var callback = function (e, result) { 
if (e) { 
    console.log(e); 
    process.exit(1); 
} 

console.log(result); 
process.exit(0); 
} 

db.open(function (e) { 
if (e) callback(e); 

db.collection('system.js', function (e, coll) { 
    if (e) callback(e); 

    coll.save({ 
     "_id" : "myFunction", 
     "value" : "function myFunction() { return 123; }" 
    }, function (e) { 
     if (e) callback(e); 

     db.eval("myFunction()", [], function (e, result) { 
      if (e) callback(e); 

      callback(undefined, result); 
     }); 

    }); 
}); 

}); 

kết quả đầu ra:

[Error: eval failed: invoke failed: JS Error: TypeError: myFunction is not a function nofile_a:0] 

tôi phát hiện ra rằng vấn đề có liên quan đến dấu ngoặc kép ("") gói định nghĩa hàm.

On Mongo-cli:

> db.system.js.find() 
{ "_id" : "myFunction", "value" : "function myFunction() { return 123; }" } 

Nhưng sau:

> db.system.js.save({_id : "myFunction", value : function myFunction() { return 123; }}); 

> db.system.js.find() 
{ "_id" : "myFunction", "value" : function cf__5__f_myFunction() { 
return 123; 
} } 

các db.eval ("myFunction()"), công trình!

Vì vậy, câu hỏi của tôi là: Làm thế nào tôi có thể lưu một thủ tục được lưu trữ từ node.js bằng trình điều khiển gốc-mongodb-nút?

Trả lời

15

Sau khi đọc documentation về các loại điều khiển dữ liệu, tôi nhận ra rằng thay vì đi qua các chuỗi với mã này, tôi cần phải vượt qua một đối tượng mongo.Code:

{ 
    "_id" : "myFunction", 
    "value" : new mongo.Code("function myFunction() { return 123; }") 
} 
Các vấn đề liên quan