请提供seneca的工作示例,并使用express来公开REST apis

时间:2016-12-16 07:02:52

标签: javascript express seneca

我用过这个:

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使用post param json作为{“role”:“api”,“type”:“asset”}

TypeError:无法读取undefined的属性'util'    在web上(C:\ node_projects \ node_modules \ seneca-web \ web.js:25:22)    在Layer.handle [as 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)    at expressInit(C:\ node_projects \ node_modules \ express \ lib \ middleware \ init.js:33:5)    在Layer.handle [as 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”:{}, “电平”: “警告”, “时”:1481878030070} {“notice”:“seneca:找不到{use:{prefix:'/ cam',pin:{role:'api',type:''}匹配的动作模式,map:{asset:[Object ],invoice:[Object]}},role:'web'},并且没有提供默认结果(使用默认的$ property)。“,”code“:”act_not_found“,”err“:{”eraro“:true ,“orig”:null,“code”:“act_not_found”,“seneca”:true,“package”:“seneca”,“msg”:“seneca:找不到{use:{prefix:'/的匹配操作模式cam',pin:{role:'api',type:''},map:{asset:[Object],invoice:[Object]}},role:'web'},没有默认结果提供(使用默认的$ property)。“,”details“:{”args“:”{use:{prefix:'/ cam',pin:{role:'api',type:''}, map:{asset:[Object],invoice:[Object]}},role:'web'}“,”plugin“:{}},”callpoint“:”at handle_inward_break(C:\ node_projects \ node_modules \ seneca \ seneca.js:1155:23) “},” ACTID “:” gh3fzeqpdsp0 / so5yjiwk3v1l “ ”MSG“:{ ”使用“:{ ”前缀“: ”/凸轮“, ”销“:{ ”角色“:” API”, “类型”: “”}, “地图”:{ “资产”:{ “GET”:TR UE, “POST”:真正}, “发票”:{ “GET”:真实的, “POST”:真正}}}, “角色”: “网络”, “元$”:{ “ID”:“gh3fzeqpdsp0 / so5yjiwk3v1l “ ”TX“: ”so5yjiwk3v1l“}, ”元“:{}, ”听“:假的, ”运输“:{}, ”种“: ”行为“, ”案例“: ”ERR“,”持续时间 “:260,” 电平 “:” 错误”, “何时”:1481878030071}

1 个答案:

答案 0 :(得分:2)

以下是一个工作示例:

'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"});
     });