在NodeJS中将数据从一个js文件同步传递到另一个
Pass data from one js file to other synchronously in NodeJS
我遇到这样一种情况,我需要在我的控制器文件夹中的服务文件夹中执行服务功能,一旦我收到输出,我需要将其传回给 UI。
//controller
var service = require('service');
api.get('/users', function(request, response) {
var name = request.query['name'];
var responseFromService = service.someAPI(name);
response.send(responseFromService).status(200);
});
//Service
exports.callTwitterAPI = function(twitterHandle,callback){
var responseFromTwitterService;
console.log("Calling Twitter API.." + twitterHandle);
someAPI.get('users/show', {screen_name: twitterHandle}, function (err, data, res) {
if (err) {
//loggerError.error('No connection to twitter :', Date.now());
responseFromTwitterService = JSON.stringify(err) + "Unable to connect twitter";
} else if (data.errors) {
responseFromTwitterService ="User Not Found!!"
// loggerInfo.info('No Twitter handle found for :', twitterHandle);
} else {
console.log("here..");
responseFromTwitterService = data;
}
console.log('response : '+ responseFromTwitterService);
return (null,responseFromTwitterService);
});
}
现在,我需要暂缓执行
response.send(responseFromService).status(200);
此行直到我的服务 returns 响应,我需要使其同步。
提前致谢:)
您的服务要么本质上是同步的,要么本质上是异步的,您将如何处理它。
如果服务调用是同步的,那么您所写的内容就可以正常工作。如果它是异步的,那么你只需要在它的回调中发送你的响应,例如:
//controller
var service = require('service');
api.get('/users', function(request, response) {
var name = request.query['name'];
var responseFromService = service.someAPI(name, function(err, responseFromService) {
response.send(responseFromService).status(200);
});
});
//Service
exports.someAPI = function(name, callback){
//some calculations
return callback(null, responseFromService);
}
更新后编辑
您的服务从未调用您声明的回调。请注意您的最后一行:
return (null, responseFromTwitterService);
实际上什么也没做。相反,你想要:
return callback(null, responseFromTwitterService);
然后你在controller中的调用代码就可以按照我说的写了。
我遇到这样一种情况,我需要在我的控制器文件夹中的服务文件夹中执行服务功能,一旦我收到输出,我需要将其传回给 UI。
//controller
var service = require('service');
api.get('/users', function(request, response) {
var name = request.query['name'];
var responseFromService = service.someAPI(name);
response.send(responseFromService).status(200);
});
//Service
exports.callTwitterAPI = function(twitterHandle,callback){
var responseFromTwitterService;
console.log("Calling Twitter API.." + twitterHandle);
someAPI.get('users/show', {screen_name: twitterHandle}, function (err, data, res) {
if (err) {
//loggerError.error('No connection to twitter :', Date.now());
responseFromTwitterService = JSON.stringify(err) + "Unable to connect twitter";
} else if (data.errors) {
responseFromTwitterService ="User Not Found!!"
// loggerInfo.info('No Twitter handle found for :', twitterHandle);
} else {
console.log("here..");
responseFromTwitterService = data;
}
console.log('response : '+ responseFromTwitterService);
return (null,responseFromTwitterService);
});
}
现在,我需要暂缓执行
response.send(responseFromService).status(200);
此行直到我的服务 returns 响应,我需要使其同步。
提前致谢:)
您的服务要么本质上是同步的,要么本质上是异步的,您将如何处理它。
如果服务调用是同步的,那么您所写的内容就可以正常工作。如果它是异步的,那么你只需要在它的回调中发送你的响应,例如:
//controller
var service = require('service');
api.get('/users', function(request, response) {
var name = request.query['name'];
var responseFromService = service.someAPI(name, function(err, responseFromService) {
response.send(responseFromService).status(200);
});
});
//Service
exports.someAPI = function(name, callback){
//some calculations
return callback(null, responseFromService);
}
更新后编辑
您的服务从未调用您声明的回调。请注意您的最后一行:
return (null, responseFromTwitterService);
实际上什么也没做。相反,你想要:
return callback(null, responseFromTwitterService);
然后你在controller中的调用代码就可以按照我说的写了。