app.use()需要中间件函数app.use(seneca.export('web'));

我是seneca的noob,我只是试图从Node js开发微服务运行示例代码,它说:

var seneca = require('seneca')(); seneca.add('role:api,cmd:bazinga',function(args,done){ done(null,{bar:"Bazinga!"}); }); seneca.act('role:web',{use:{ prefix: '/my-api', pin: {role:'api',cmd:'*'}, map:{ bazinga: {GET: true} } }}) var express = require('express'); var app = express(); app.use( seneca.export('web') ); // <<<<<< this line might be the cause app.listen(3000); 

但我得到一个错误,说:

 TypeError:app.use()需要中间件function
    在EventEmitter.use(/home/oem/node_modules/express/lib/application.js:209:11)
    在对象。  (/home/oem/Documents/seneca/app.js:7:8)
    在Module._compile(module.js:409:26)
    在Object.Module._extensions..js(module.js:416:10)
    在Module.load(module.js:343:32)
    在Function.Module._load(module.js:300:12)
    在Function.Module.runMain(module.js:441:10)
    在启动(node.js:139:18)
    在node.js:974:3

此外,我试图运行从网上复制的另一个示例代码,对不起,我只能find链接。 但我只是复制,粘贴并试图运行,我得到了同样的错误。 我认为这是更多的设置问题?

编辑

我仍然试图玩这个。 我明白这一点是,在app.use行,基本上我只是调用seneca-web模块。 所以我做的是

 app.use(require('seneca-web')) 

代替

 app.use( seneca.export('web') ) 

然后我运行了node app.js ,它在命令中运行了没有错误的脚本。 但是当试图从浏览器访问模块,然后我得到了错误,说没有findutil,并指向seneca网页文件,实际上是从seneca调用。 现在我不知道现在该做什么

我试图从6.0降低节点版本的版本,但仍然有相同的错误

看看主seneca.js文件 ,你会看到只有transport被列为默认插件(不是web ):

 default_plugins: { transport: true } 

这行app.use(seneca.export('web')); 因此会传递undefined来表示为中间件,从而导致您遇到的错误。

您必须首先明确告诉seneca使用您的express服务器的web插件作为参数。 尝试这个:

 var Seneca = require("seneca"); var Express = require("express"); var Web = require("seneca-web"); var seneca = Seneca(); var server = Express(); var config = { routes:{ prefix : "/my-api", pin: "role:api,cmd:*", map:{ bazinga: { GET: true } } } }; seneca.use(Web, { adapter: "express", context: server }) seneca.act("role:web", config); seneca.add("role:api,cmd:bazinga", bazinga); server.listen(3000); function bazinga(args, done){ done(null, { bar: "Bazinga!" }); } 

在浏览器中调用http:// localhost:3000 / my-api / bazinga会生成{"bar":"Bazinga!"}