Javascript 来自Node.js的API调用
我有这样一个代码:Javascript 来自Node.js的API调用,javascript,node.js,Javascript,Node.js,我有这样一个代码: const req = require("request"); const apiReq = req("http://example.com/car/items.json", (err, res, body) => { if (!err && res.statusCode === 200) { return JSON.parse(body); } }) console.log(apiReq) module.exports.api =
const req = require("request");
const apiReq = req("http://example.com/car/items.json", (err, res, body) => {
if (!err && res.statusCode === 200) {
return JSON.parse(body);
}
})
console.log(apiReq)
module.exports.api = apiReq;
如果我在apiReq中登录控制台,它将返回实际的JSON响应,但我想将其导出。log(apiReq)返回我的请求对象。这段代码有什么问题?在您的示例中,HTTP请求是在NodeJS读取您的文件时执行的(您可能不希望它这样做,因为它是一个坏习惯) 您可以通过使用回调来解决这个问题
const req = require("request");
module.exports = function (successCb, errorCb) {
req("http://example.com/car/items.json", (err, res, body) => {
if (err) return errorCb(err);
// You may want to add an additional check for statusCode 200
// How you handle that depends on your scenario.
successCb(JSON.parse(body));
})
}
从另一个文件
const yourReqModule = require('your-req-module')
yourReqModule(function(jsonResponse) {
handleJsonResponse...
}, function (error) {
// Handle error
});
通过使用这种技术,HTTP请求在您实际运行yourReqModule.api()
之前不会执行
编辑:
您应该始终包括错误处理。我已经用这个示例实现更新了代码。在您的示例中,HTTP请求是在NodeJS读取您的文件时执行的(您可能不希望它这样做,因为它是一个坏习惯) 您可以通过使用回调来解决这个问题
const req = require("request");
module.exports = function (successCb, errorCb) {
req("http://example.com/car/items.json", (err, res, body) => {
if (err) return errorCb(err);
// You may want to add an additional check for statusCode 200
// How you handle that depends on your scenario.
successCb(JSON.parse(body));
})
}
从另一个文件
const yourReqModule = require('your-req-module')
yourReqModule(function(jsonResponse) {
handleJsonResponse...
}, function (error) {
// Handle error
});
通过使用这种技术,HTTP请求在您实际运行yourReqModule.api()
之前不会执行
编辑:
您应该始终包括错误处理。我已经用一个示例实现更新了代码。您可以尝试导出一个函数,而不是请求对象
const request = require('request')
module.exports = function makeRequest(cb){
return new Promise((reject, resolve) => {
request("http://example.com/car/items.json", (err, response, body) => {
if(cb){
if(err)
return cb(err)
return cb(null, JSON.parse(body));
} else {
if(err)
return reject(err);
return resolve(JSON.parse(body));
}
})
})
}
然后,在其他模块中
var makeAPIRequest = require('./path/to/module')
makeAPIRequest().then(...).catch(...);
// or via callback
makeAPIRequest((error, body) => {
if(error){
// handle error
} else {
// handle response
}
})
您可以尝试导出函数而不是请求对象
const request = require('request')
module.exports = function makeRequest(cb){
return new Promise((reject, resolve) => {
request("http://example.com/car/items.json", (err, response, body) => {
if(cb){
if(err)
return cb(err)
return cb(null, JSON.parse(body));
} else {
if(err)
return reject(err);
return resolve(JSON.parse(body));
}
})
})
}
然后,在其他模块中
var makeAPIRequest = require('./path/to/module')
makeAPIRequest().then(...).catch(...);
// or via callback
makeAPIRequest((error, body) => {
if(error){
// handle error
} else {
// handle response
}
})
你能更清楚地知道你想要实现什么吗?当nodej读取你的文件时,它正在执行实际的请求。我猜您希望在调用导出对象时执行它。将
apiReq
放入函数中并导出该函数function@riyaz-ali我希望apiReq返回JSON而不是请求对象本教程将非常有用:您能更清楚地了解您想要实现什么吗?当NodeJ读取您的文件时,它正在执行实际的请求。我猜您希望在调用导出对象时执行它。将apiReq
放入函数中并导出该函数function@riyaz-ali我希望apiReq返回JSON而不是请求对象本教程将非常有用: