我正在创建一个与MongoDB接口的自定义组件。我编写了一个只连接到MongoDB的CoffeeScript文件,并将其存储在noflo/components文件夹中。
MongoBase.coffee
noflo = require "noflo"
mongodb = require "mongodb"
url = require "url"
class exports.MongoBase extends noflo.Component
constructor: ->
super
@inPorts =
url: new noflo.Port()
@inPorts.url.on "data", (data) =>
try
@parseConnectionString(data)
@MongoClient = mongodb.MongoClient;
@MongoClient.connect @serverUrl, (err, db) ->
if err
console.log("Error in connecting to MongoDB")
else
console.log("Connected to MongoDB")
catch error
console.log(error)
parseConnectionString: (connectionString) =>
databaseUrl = try
url.parse(connectionString)
catch error
console.log(error)
[..., @serverUrl, @databaseName] = databaseUrl.split('/')
@serverUrl = "mongo://" + @serverUrl我将以下条目添加到component.json
"MongoBase": "components/MongoBase.coffee"除此之外,我创建了一个mongo.fbp文件来检查组件的流程。FBP文件具有以下代码:
'mongodb://localhost:27017/test' -> url DocReader(MongoBase)在运行noflo mongo.fbp时,我得到以下错误:
/home/saurabh/workspace/noflo/node_modules/fbp/lib/fbp.js:1628
edges.forEach(function (o, i) {
^
TypeError: Object #<Object> has no method 'forEach'
at Object.parser.registerEdges (/home/saurabh/workspace/noflo/node_modules/fbp/lib/fbp.js:1628:15)
at peg$c25 (/home/saurabh/workspace/noflo/node_modules/fbp/lib/fbp.js:60:50)
at peg$parseline (/home/saurabh/workspace/noflo/node_modules/fbp/lib/fbp.js:749:30)
at peg$parsestart (/home/saurabh/workspace/noflo/node_modules/fbp/lib/fbp.js:282:12)
at Object.parse (/home/saurabh/workspace/noflo/node_modules/fbp/lib/fbp.js:1650:18)
at Object.exports.loadFBP (/home/saurabh/workspace/noflo/lib/Graph.js:1065:33)
at /home/saurabh/workspace/noflo/lib/Graph.js:1116:24
at fs.js:268:14
at Object.oncomplete (fs.js:107:15)我的代码或者我用来运行代码的步骤有问题吗?
发布于 2016-01-25 00:32:42
您可能已经弄明白了这一点,因为您已经问了几个月了,但是我相信您需要在导出之前将getComponent()方法添加到您的类中。
noflo = require "noflo"
mongodb = require "mongodb"
url = require "url"
class MongoBase extends noflo.Component
constructor: ->
super
@inPorts =
url: new noflo.Port()
@inPorts.url.on "data", (data) =>
try
@parseConnectionString(data)
@MongoClient = mongodb.MongoClient;
@MongoClient.connect @serverUrl, (err, db) ->
if err
console.log("Error in connecting to MongoDB")
else
console.log("Connected to MongoDB")
catch error
console.log(error)
parseConnectionString: (connectionString) =>
databaseUrl = try
url.parse(connectionString)
catch error
console.log(error)
[..., @serverUrl, @databaseName] = databaseUrl.split('/')
@serverUrl = "mongo://" + @serverUrl
MongoBase.getComponent = -> new MongoBase
exports.MongoBase = MongoBase此外,在要使组件加载器工作的图中,您需要指定组件所在的包。如果您的package.json/component.json有一个类似"name": "mongo-base"的name条目,那么您必须在FBP图中指定它,如下所示:
'mongodb://localhost:27017/test' -> url DocReader(mongo-base/MongoBase)注意:加载器会破坏包名称中的所有'noflo-'实例,因此需要考虑到这一点。例如,名字'noflo-mongo'会变成'mongo'__,所以当调用包的组件时,你应该在fbp DocReader(mongo/MongoBase)中编写,而不是在DocReader(noflo-mongo/MongoBase)__中。
https://stackoverflow.com/questions/32744101
复制相似问题