【问题标题】:Is it possible to return files for server methods in hapi是否可以在 hapi 中返回服务器方法的文件
【发布时间】:2014-11-21 08:56:12
【问题描述】:

我正在尝试将reply.file (http://hapijs.com/api#replyfilepath-options) 用作server.method (http://hapijs.com/api#servermethodname-fn-options),但它说我的next 函数没有file

Debug: hapi, internal, implementation, error
    TypeError: Uncaught error: Object function (err, result) {

                methodNext(err, result, null, { msec: timer.elapsed(), error: err });
            } has no method 'file'
    at /Users/user/Work/Dev/export.js:37:12
    at ChildProcess.<anonymous> (/Users/user/Work/Dev/node_modules/webshot/lib/webshot.js:221:9)
    at ChildProcess.emit (events.js:98:17)
    at Process.ChildProcess._handle.onexit (child_process.js:810:12)

我有以下几点:

server.method('getExport', function(reqParams, queryParams, hostUri, next) {

  // ...
  next.file(filePath, {
    // Download as an attachment
    mode: 'attachment'
  });

});


Instance.server.route({
  method: 'GET',
  path: '/export',
  config: {
    handler: function(req, reply) {
      var uri = req.server.info.uri;

      server.methods.getExport(
        req.params,
        req.query,
        uri,
        reply
      );
    }
  }
});

有可能吗?

我正在使用 hapi v6.9。

【问题讨论】:

    标签: node.js hapijs


    【解决方案1】:

    当您调用该方法时,您必须向它传递一个回调方法。 https://github.com/hapijs/hapi/blob/83201d29bcc8c8edc46d9ecf4f1d51b7f3a3a4ff/lib/methods.js#L64

    这是你的代码工作:

    var hapi = require('hapi'),
        server = new hapi.Server('0.0.0.0', 5000);
    
    server.method('getExport', function(reqParams, queryParams, hostUri, reply, next) {
    
      // ...
      reply.file('/tmp/test.js', {
        // Download as an attachment
        mode: 'attachment'
      });
    
      next();
    
    });
    
    server.route({
      method: 'GET',
      path: '/export',
      config: {
        handler: function(req, reply) {
          var uri = req.server.info.uri;
    
          server.methods.getExport(
            req.params,
            req.query,
            uri,
            reply,
            function () {
                console.log('ran');
            }
          );
        }
      }
    });
    
    server.start()
    

    我强烈建议不要为此使用服务器方法,用文件回复似乎有点过头了。如果可能的话,我还强烈建议升级到最新版本的 hapi。

    【讨论】:

      猜你喜欢
      • 2020-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-02
      • 1970-01-01
      • 2012-01-04
      相关资源
      最近更新 更多