请提供带有 express 的 seneca 工作示例以公开 REST api
Please provide working example of seneca with express to expose REST apis
我用过这个:
var seneca = require('seneca')();
seneca.act('role:web',{use:{
prefix: '/cam',
pin: {role:'api',type:'*'},
map:{
asset: {GET:true,POST:true}
}
}});
seneca.add({role: "api",type: "asset"}, function(args, done) {
done(null, {response: "An example asset"});
});
var express = require('express');
var bodyparser = require('body-parser');
var web = require('seneca-web');
var app = express();
app.use(bodyparser.json());
app.use( web );
app.listen(3000);
当我尝试使用 POSTMAN url 调用 api 时,上面的示例给出了以下错误: http://localhost:3000/cam/asset with post param json as { "role":"api","type":"asset"}
TypeError: 无法读取未定义的 属性 'util'
在网络上(C:\node_projects\node_modules\seneca-web\web.js:25:22)
在 Layer.handle [作为 handle_request] (C:\node_projects\node_modules\express\lib\router\layer.js:95:5)
在 trim_prefix(C:\node_projects\node_modules\express\lib\router\index.js:312:13)
在 C:\node_projects\node_modules\express\lib\router\index.js:280:7
在 Function.process_params(C:\node_projects\node_modules\express\lib\router\index.js:330:12)
接下来 (C:\node_projects\node_modules\express\lib\router\index.js:271:10)
在 expressInit (C:\node_projects\node_modules\express\lib\middleware\init.js:33:5)
在 Layer.handle [作为 handle_request] (C:\node_projects\node_modules\express\lib\router\layer.js:95:5)
在 trim_prefix(C:\node_projects\node_modules\express\lib\router\index.js:312:13)
在 C:\node_projects\node_modules\express\lib\router\index.js:280:7
并且它还在控制台上打印以下 JSON。与未找到匹配的操作模式相关的内容。
{"err":{},"level":"warn","when":1481878030070}
{"notice":"seneca: No matching action pattern found for { use: { prefix: '/cam', pin: { role: 'api', type: '' }, map: { asset: [Object], invoice: [Object] } }, role: 'web' }, and no default result provided (using a default$ property).","code":"act_not_found","err":{"eraro":true,"orig":null,"code":"act_not_found","seneca":真,"package":"seneca","msg":"seneca: No matching action pattern found for { use: { prefix: '/cam', pin: { role: 'api', type: '' }, map: { asset: [Object], invoice: [Object] } }, role: 'web' }, and no default result provided (using a default$ property).","details":{"args":"{ use: { prefix: '/cam', pin: { role: 'api', type: '' }, map: { asset: [Object], invoice: [对象] } }, 角色: 'web' }","plugin":{}},"callpoint":"at handle_inward_break (C:\node_projects\node_modules\seneca\seneca.js:1155:23)"},"actid":"gh3fzeqpdsp0/so5yjiwk3v1l" ,"msg":{"use":{"prefix":"/cam","pin":{"role":"api","type" :""},"map":{"asset":{"GET":true,"POST":true},"invoice":{"GET":真,"POST":真}}},"role":"web","meta$":{"id":"gh3fzeqpdsp0/so5yjiwk3v1l","tx":"so5yjiwk3v1l"}},"meta":{},"listen":false,"transport":{},"kind":"act", "case":"ERR","duration":260,"level":"error","when":1481878030071}
下面是一个工作示例:
'use strict'
var Seneca = require('seneca')
var Express = require('express')
var Web = require('seneca-web')
var Routes = [{
prefix: '/api',
pin: 'role:api,cmd:*',
map: {
home: {GET: true}
}
}]
var seneca = Seneca()
var config = {
routes: Routes,
adapter: require('seneca-web-adapter-express'),
context: Express()
}
seneca.client()
.use(Web, config)
.ready(() => {
var server = seneca.export('web/context')()
server.listen('4000', () => {
console.log('server started on: 4000')
})
})
seneca.add({role: 'api',cmd:'home'}, function(args, done) {
done(null, {response:"hey"});
});
我用过这个:
var seneca = require('seneca')();
seneca.act('role:web',{use:{
prefix: '/cam',
pin: {role:'api',type:'*'},
map:{
asset: {GET:true,POST:true}
}
}});
seneca.add({role: "api",type: "asset"}, function(args, done) {
done(null, {response: "An example asset"});
});
var express = require('express');
var bodyparser = require('body-parser');
var web = require('seneca-web');
var app = express();
app.use(bodyparser.json());
app.use( web );
app.listen(3000);
当我尝试使用 POSTMAN url 调用 api 时,上面的示例给出了以下错误: http://localhost:3000/cam/asset with post param json as { "role":"api","type":"asset"}
TypeError: 无法读取未定义的 属性 'util' 在网络上(C:\node_projects\node_modules\seneca-web\web.js:25:22) 在 Layer.handle [作为 handle_request] (C:\node_projects\node_modules\express\lib\router\layer.js:95:5) 在 trim_prefix(C:\node_projects\node_modules\express\lib\router\index.js:312:13) 在 C:\node_projects\node_modules\express\lib\router\index.js:280:7 在 Function.process_params(C:\node_projects\node_modules\express\lib\router\index.js:330:12) 接下来 (C:\node_projects\node_modules\express\lib\router\index.js:271:10) 在 expressInit (C:\node_projects\node_modules\express\lib\middleware\init.js:33:5) 在 Layer.handle [作为 handle_request] (C:\node_projects\node_modules\express\lib\router\layer.js:95:5) 在 trim_prefix(C:\node_projects\node_modules\express\lib\router\index.js:312:13) 在 C:\node_projects\node_modules\express\lib\router\index.js:280:7
并且它还在控制台上打印以下 JSON。与未找到匹配的操作模式相关的内容。
{"err":{},"level":"warn","when":1481878030070} {"notice":"seneca: No matching action pattern found for { use: { prefix: '/cam', pin: { role: 'api', type: '' }, map: { asset: [Object], invoice: [Object] } }, role: 'web' }, and no default result provided (using a default$ property).","code":"act_not_found","err":{"eraro":true,"orig":null,"code":"act_not_found","seneca":真,"package":"seneca","msg":"seneca: No matching action pattern found for { use: { prefix: '/cam', pin: { role: 'api', type: '' }, map: { asset: [Object], invoice: [Object] } }, role: 'web' }, and no default result provided (using a default$ property).","details":{"args":"{ use: { prefix: '/cam', pin: { role: 'api', type: '' }, map: { asset: [Object], invoice: [对象] } }, 角色: 'web' }","plugin":{}},"callpoint":"at handle_inward_break (C:\node_projects\node_modules\seneca\seneca.js:1155:23)"},"actid":"gh3fzeqpdsp0/so5yjiwk3v1l" ,"msg":{"use":{"prefix":"/cam","pin":{"role":"api","type" :""},"map":{"asset":{"GET":true,"POST":true},"invoice":{"GET":真,"POST":真}}},"role":"web","meta$":{"id":"gh3fzeqpdsp0/so5yjiwk3v1l","tx":"so5yjiwk3v1l"}},"meta":{},"listen":false,"transport":{},"kind":"act", "case":"ERR","duration":260,"level":"error","when":1481878030071}
下面是一个工作示例:
'use strict'
var Seneca = require('seneca')
var Express = require('express')
var Web = require('seneca-web')
var Routes = [{
prefix: '/api',
pin: 'role:api,cmd:*',
map: {
home: {GET: true}
}
}]
var seneca = Seneca()
var config = {
routes: Routes,
adapter: require('seneca-web-adapter-express'),
context: Express()
}
seneca.client()
.use(Web, config)
.ready(() => {
var server = seneca.export('web/context')()
server.listen('4000', () => {
console.log('server started on: 4000')
})
})
seneca.add({role: 'api',cmd:'home'}, function(args, done) {
done(null, {response:"hey"});
});