Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 节点模块导出返回未定义_Node.js_Mocha.js_Chai - Fatal编程技术网

Node.js 节点模块导出返回未定义

Node.js 节点模块导出返回未定义,node.js,mocha.js,chai,Node.js,Mocha.js,Chai,我试图创建一个节点模块来获取一些帖子,但是我得到了一个未定义的错误 Index.js var request = require('request'); function getPosts() { var options = { url: 'https://myapi.com/posts.json', headers: { 'User-Agent': 'request' } }; function callback(error, respon

我试图创建一个节点模块来获取一些帖子,但是我得到了一个未定义的错误

Index.js

var request = require('request');

function getPosts() {

  var options = {
    url: 'https://myapi.com/posts.json',
    headers: {
      'User-Agent': 'request'
    }
  };

  function callback(error, response, body) {
    if (!error && response.statusCode == 200) {
      return JSON.parse(body);
    }
  }

  request(options, callback);
}

exports.posts = getPosts;
var should = require('chai').should(),
    myModule = require('../index');

describe('Posts call', function () {
  it('should return posts', function () {
    myModule.posts().should.equal(100);
  });
});
test/index.js

var request = require('request');

function getPosts() {

  var options = {
    url: 'https://myapi.com/posts.json',
    headers: {
      'User-Agent': 'request'
    }
  };

  function callback(error, response, body) {
    if (!error && response.statusCode == 200) {
      return JSON.parse(body);
    }
  }

  request(options, callback);
}

exports.posts = getPosts;
var should = require('chai').should(),
    myModule = require('../index');

describe('Posts call', function () {
  it('should return posts', function () {
    myModule.posts().should.equal(100);
  });
});

我遗漏了什么?

==在更正错误后编辑===

看起来你并不真正了解回调的工作原理

您定义的回调将异步启动,因此实际上无法使用它以您尝试的方式返回值。方法是让getPosts()函数实际接受另一个函数,这是调用代码关心的回调。所以你的测试应该是这样的:

describe('Posts call', function(){
  it('should have posts', function(done){
    myModule.posts(function(err, posts){
      if(err) return done(err);
      posts.should.equal(100);
      done();
    });
  }
});
那么您的模块代码应该是这样的,以便支持:

var request = require('request');

function getPosts(callback) {

  var options = {
    url: 'https://myapi.com/posts.json',
    headers: {
      'User-Agent': 'request'
    }
  };

  function handleResponse(error, response, body) {
    if (!error && response.statusCode == 200) {
      return callback(null, JSON.parse(body));
    }
    return callback(error); // or some other more robust error handling.
  }

  request(options, handleResponse);
}

exports.posts = getPosts;

这里可能有更好的错误处理,比如确保
JSON.parse
正确工作,但这应该会让您产生想法。

很抱歉,这是一个输入错误。我的设置正确。
getPosts
不会返回任何内容