2012-04-18 18 views
6

el siguiente fragmento de código:¿Cómo puedo guardar un javascript almacenado en mongodb de 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); 
     }); 

    }); 
}); 

}); 

salidas:

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

descubrí que el problema está relacionado con las comillas ("") envolviendo la definición de la función.

En mongo-cli:

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

Pero después:

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

y

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

la db.eval ("myFunction()"), funciona!

Entonces, mi pregunta es: ¿cómo puedo guardar un procedimiento almacenado de node.js usando el controlador node-mongodb-native?

Respuesta

15

Después de leer el documentation acerca de los tipos de datos del conductor, me di cuenta de que en lugar de pasar la cuerda con el código, que tenía que pasar un objeto mongo.Code:

{ 
    "_id" : "myFunction", 
    "value" : new mongo.Code("function myFunction() { return 123; }") 
} 
Cuestiones relacionadas