2016-03-21 46 views
1

我正在使用Seneca來路由API調用並表達爲我的文件提供服務。 問題是,我似乎無法找到一種方法來從API獲取我的數據後發送迴應客戶端的響應。 隨着快遞,我只會使用res.send,但由於我在塞內加方面,我不能。在文檔中沒有發現對此問題的任何引用。如何使用Seneca和Express發送響應

"use strict"; 
const bodyParser = require('body-parser'); 
const express = require('express'); 
const jsonp = require('jsonp-express'); 
const Promise = require('bluebird'); 
const path = require('path'); 
const seneca = require('seneca')(); 
const app = express(); 

module.exports = (function server(options) { 

    seneca.add('role:api,cmd:getData', getData); 

    seneca.act('role:web',{use:{ 
     prefix: '/api', 
     pin: {role:'api',cmd:'*'}, 
     map:{ 
      getData: {GET:true}   // explicitly accepting GETs 
     } 
    }}); 

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

    app.use(express.static(path.join(__dirname, '../../dist/js'))) 
    app.use(express.static(path.join(__dirname, '../../dist/public'))) 

    app.listen(3002, function() { 
     console.log('listening on port 3002'); 
    }); 

    function getData(arg, done){ 
     //Getting data from somewhere.... 

     //Here I would like to send back a response to the client.    
    } 
}())  

回答

1

按照senecajs documentation,你應該能您getData方法返回/發送值/響應中只是調用done()。考慮以下幾點:

在這裏,我能夠擊中/api/getData並收到{foo: 'bar'}的迴應。

"use strict"; 
const express = require('express'); 

const seneca = require('seneca')(); 
const app = express(); 

seneca.add('role:api,cmd:getData', getData); 

seneca.act('role:web',{use:{ 
    prefix: '/api', 
    pin: {role:'api',cmd:'*'}, 
    map:{ 
     getData: {GET:true}   // explicitly accepting GETs 
    } 
}}); 

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

app.listen(3002, function() { 
    console.log('listening on port 3002'); 
}); 

function getData(arg, done){ 
    done(null, {foo: 'bar'});   
} 
+0

工程!這比預期的方式更容易。 – Yuval

+1

嗨,當我嘗試運行你的這個腳本時,我得到一個錯誤,說「app.use()需要中間件功能」? –

+0

同樣在這裏,塞內卡入門結束了相同的錯誤 – Ben