Node.js 节点模块导出返回未定义
我试图创建一个节点模块来获取一些帖子,但是我得到了一个未定义的错误 Index.jsNode.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
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
不会返回任何内容