2014-02-04 1 views
1

Я создал набор функций на моем сервере MongoDB, который я хотел бы использовать с MongoClient в сценариях nodejs. Allof thedocumentation Я читал, как мне это сделать, но из оболочки только кажется.Выполнение серверной функции от MongoClient в node.js

Как это обычно работает в оболочке:

mongo database my.script.js 
mongo 
> use database 
> db.loadServerScripts() 
> add("This is a string taken in by the add function I just loaded") 

Это то, что я пытался/заглянул (возражаете CoffeeScript):

MongoClient = require('mongodb').MongoClient 

MongoClient.connect 'mongodb://127.0.0.1:27017/database', (e, db) -> 
    console.log db.eval    #Function, but not sure what to call with 
    console.log db.runCommand  #undefined 
    console.log db.loadServerScripts #undefined 
    console.log db.load    #undefined 
    console.log db.command   #Function, but not sure what to call with 
    console.log db.add    #this is one of my custom functions 

Надеемся, что это возможно с MongoClient. Кажется, я мог бы использовать eval(), если мне удастся загрузить скрипт, но пока что это сложная часть. В качестве альтернативы, я полагаю, я мог бы минимизировать мои функции и запустить их через eval(), но я бы предпочел не делать этого.

ответ

0

Вы можете использовать eval (это выглядит как вам не нужно загружать любые функции первой, команда загрузки только чтобы функции, доступные из командной строки):

db.eval('add("This is a string taken in by the add function I just loaded")', function(err, result) { 
    ... 
}); 

Или, если вы хотите чтобы быть немного более гибким в передаче аргументов:

db.eval('function(x) { return add(x); }', [ ARG ], function(err, result) { ... }); 

(кажется, что вы не можете просто использовать 'add' в качестве первого аргумента, вам нужно обернуть ее в анонимную функцию первой, но я мог бы быть что-то отсутствует. ..)

+0

Это, кажется, дает мне много «неопределенного не является функцией», когда я запускаю его. Я буду исследовать дальше и посмотреть, смогу ли я заставить его работать. Благодарю. – Seiyria

+0

Nevermind. Я делал некоторые довольно глупые ошибки, и это испортилось со мной. Я заметил, что в вашем вызове eval() вы передаете обратный вызов, что не то, что я делаю. Теперь все проверяет, спасибо. – Seiyria

Смежные вопросы