我是seneca的菜鸟,我只是想尝试使用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() requires middleware functions at EventEmitter.use (/home/oem/node_modules/express/lib/application.js:209:11) at Object. (/home/oem/Documents/seneca/app.js:7:8) at Module._compile (module.js:409:26) at Object.Module._extensions..js (module.js:416:10) at Module.load (module.js:343:32) at Function.Module._load (module.js:300:12) at Function.Module.runMain (module.js:441:10) at startup (node.js:139:18) at node.js:974:3
此外,我尝试运行从网络上复制的另一个示例代码,对不起,我只是可以找到该链接。但我只是复制,粘贴并试图运行,我得到了同样的错误。我认为这更像是一个设置问题?
修改
我还在尝试玩这个。我理解这一点的方式是在app.use行,基本上我只是调用seneca-web模块。所以我做的是
app.use(require('seneca-web'))
而不是
app.use( seneca.export('web') )
然后我运行node app.js
,它运行脚本,命令中没有错误。
但是当试图从浏览器访问模块时,我得到错误,说找不到util,并且指向seneca web文件,实际上是来自seneca的调用。现在我不知道该怎么做
我尝试将6.0版本的节点版本从6.0降低到4.0,但仍然出现同样的错误
答案 0 :(得分:11)
看一下主seneca.js file,您会看到只有transport
被列为默认插件(不是web
):
default_plugins: {
transport: true
}
因此,app.use(seneca.export('web'));
行传递undefined
表示为中间件,因此您遇到了错误。
您必须首先明确告诉seneca
将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!"}