2016-09-13 22 views
5

私はセネカでのnoobだと私はちょうどノードJSでMicroservicesの開発からサンプルコードを実行しようとしている、そしてそれは言う:app.use()にはミドルウェア関数app.use(seneca.export( 'web'))が必要です。

 
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 
を:イムが言うエラーが出

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); 

が、

また、Webからコピーした別のサンプルコードを実行しようとしましたが、申し訳ありませんがリンクを見つけることができます。しかし、私はちょうどコピー、貼り付けて実行しようとしたと私は同じエラーを持っています。私はこれが設定上の問題だと思っていますか?

編集

私はまだこれを再生しようとしています。私がこれを理解する方法は、app.use行では基本的にseneca-webモジュールを呼び出すことです。そう私がやったことは

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

代わりの

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

だったし、私はそれがコマンドでエラーなしでスクリプトを実行した、node app.jsを走りました。 ブラウザからモジュールにアクセスしようとすると、utilが見つからないというエラーが表示され、実際にsenecaからの呼び出しによるseneca Webファイルを指しています。今私は

私は6.0から4.0に持っているノードのバージョンのバージョンを下げることを試みたが、それでもメインseneca.js fileを見て取り、同じエラー

+0

あなたは[こちら](https://github.com/senecajs/seneca-web#quick-example)からExpressの例を試してみましたもたらしまたは[ここ](http://korinets.name/express-seneca-example.html)? – mscdex

+0

最初のリンクには、私も同様のエラーが表示されます。地図のキーワードを指していて、予期せぬものであると言います。 2番目のリンクではエラーはありませんが、 –

+0

のSOUNDやGithubを見ている例の中では基本的にそうではありませんが、これは再現可能ですが、senecaをミドルウェアとしてロードしようとしません。 – cviejo

答えて

10

を得た今、何をすべきかわからないんだけど、あなた「のみtransportがデフォルトのプラグイン(ないweb)としてリストされていることがわかりでしょう:

default_plugins: { 
    transport: true 
} 

ラインapp.use(seneca.export('web'));したがって、ミドルウェアとして、あなたが経験しているので、エラーを表現するためにundefinedを渡しています。

senecaには、エクスプレスサーバでwebプラグインをパラメータとして使用するよう明示的に指示する必要があります。これを試してみてください:ブラウザでhttp://localhost:3000/my-api/bazingaを呼び出す

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

{"bar":"Bazinga!"}

+2

この回答をさらに改善する。現在、セネカは「セネカWebアダプタコネクト」を表現する必要があります。したがって、この答えはそれを動作させるために1行を変更します: 'seneca.use(Web、{adapter:require( 'seneca-web-adapter-express')、context:server})' 忘れずに'npm install -save seneca-web-adapter-express'をインストールしてください。 – Nick

+0

更新していただきありがとうございます – cviejo

関連する問題