首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Seneca和Express发送响应

如何使用Seneca和Express发送响应
EN

Stack Overflow用户
提问于 2016-03-21 10:48:12
回答 2查看 2.7K关注 0票数 2

我正在使用Seneca路由API调用和express来服务我的文件。问题是,在从API中获取数据之后,我似乎无法找到将响应发送回客户端的方法。使用res.send,我只会使用,但是由于我是在Seneca上下文中,所以我不能。在文档中没有找到任何关于这个问题的参考。

代码语言:javascript
复制
"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.            
     }
 }())    
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-19 05:29:39

看起来,与“web”相关的功能现在被移动到模块“seneca”中,以及用于express的单独适配器。我得到了以下修改版本的工作。

代码语言:javascript
复制
"use strict";

const express = require('express');
const app = express();
const seneca = require('seneca')({ log: 'silent' });
const web = require('seneca-web');

let routes = [{
  prefix: '/api',
  pin: 'role:api,cmd:*',
  map: {
    getData: {
      GET: true
    }
  }
}];

let config = {
  context: app,
  routes: routes,
  adapter: require('seneca-web-adapter-express')
};

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

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

seneca.ready(() => {
  app.listen(3002, () => {
    console.log('listening on port 3002');
  });
});
票数 3
EN

Stack Overflow用户

发布于 2016-03-21 11:01:25

根据senecajs文件,您应该能够在getData方法中调用done()来返回/发送值/响应。请考虑以下几点:

在这里,我能够点击/api/getData并接收到{foo: 'bar'}的响应。

代码语言:javascript
复制
"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'});         
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36129008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档