2016-03-21 6 views
1

Ich benutze Seneca, API-Aufrufe zu routen und express, um meine Dateien zu dienen. Das Problem ist, ich kann anscheinend keine Möglichkeit finden, eine Antwort zurück an den Client zu senden, nachdem meine Daten von der API abgerufen wurden. Mit Express würde ich einfach res.send verwenden, aber da ich im Seneca-Kontext bin, kann ich nicht. In der Dokumentation wurde kein Verweis auf dieses Problem gefunden.So senden Sie eine Antwort mit Seneca und 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.    
    } 
}())  

Antwort

1

Nach dem senecajs documentation Sie sollte der Lage sein, nur done() in Ihrem getData Methode aufzurufen Wert/Antwort zurück/senden. Berücksichtigen Sie Folgendes:

Hier konnte ich /api/getData treffen und {foo: 'bar'} die Antwort erhalten.

"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

Funktioniert! Es ist viel einfacher als erwartet. – Yuval

+1

Hallo, wie kommt es, wenn ich versuche, dieses Skript von dir zu starten, bekomme ich einen Fehler, der sagt "app.use() benötigt Middleware-Funktionen"? –

+0

gleich hier, die seneca beginnt mit dem gleichen fehler endet – Ben

Verwandte Themen