admin管理员组文章数量:1405316
I'm new to Node JS. My node js REST api route code is:
'use strict';
module.exports = function(app) {
var sequel = require('../controllers/sampleController');
app.get('/task?:email', function(req, res){
res.send(sequel.listByEmail(req.query.email));
});
};
And my listByEmail function is:
'use strict';
var apiKey = '1xxxxxxxxL';
exports.listByEmail = function(emailid) {
console.log(emailid);
if(emailid != null && emailid != undefined) {
var xyz = require("xyz-api")(apiKey);
xyz.person.findByEmail(emailid, function(err, data) {
if(data.status == 200){
return data; // data is in json format
}
});
}
};
I returned data like this from that listbyemail function. Data is there, if i try to print the data in console it appears. But while returning the data, it won't returned. It's always return undefined. I can't able to catch the result data from listByEmail function in route and not able to send it as response. Please helpMe!!!
I'm new to Node JS. My node js REST api route code is:
'use strict';
module.exports = function(app) {
var sequel = require('../controllers/sampleController');
app.get('/task?:email', function(req, res){
res.send(sequel.listByEmail(req.query.email));
});
};
And my listByEmail function is:
'use strict';
var apiKey = '1xxxxxxxxL';
exports.listByEmail = function(emailid) {
console.log(emailid);
if(emailid != null && emailid != undefined) {
var xyz = require("xyz-api")(apiKey);
xyz.person.findByEmail(emailid, function(err, data) {
if(data.status == 200){
return data; // data is in json format
}
});
}
};
I returned data like this from that listbyemail function. Data is there, if i try to print the data in console it appears. But while returning the data, it won't returned. It's always return undefined. I can't able to catch the result data from listByEmail function in route and not able to send it as response. Please helpMe!!!
Share Improve this question asked Aug 22, 2017 at 10:30 Saravanan CMSaravanan CM 391 gold badge5 silver badges20 bronze badges2 Answers
Reset to default 2In your ListByEmail function you are calling an asynchronous method, findByEmail
.
When you reach the return data;
line, your listByEmail function already returned so you are not returning anything to the caller.
You need to handle it asynchronously, for example:
'use strict';
var apiKey = '1xxxxxxxxL';
exports.listByEmail = function(emailid) {
return new Promise(function(resolve, reject) {
console.log(emailid);
if(emailid != null && emailid != undefined) {
var xyz = require("xyz-api")(apiKey);
xyz.person.findByEmail(emailid, function(err, data) {
if(data.status == 200){
resolve(data); // data is in json format
}
});
} else {
reject("Invalid input");
}
};
Then:
'use strict';
module.exports = function(app) {
var sequel = require('../controllers/sampleController');
app.get('/task?:email', function(req, res){
sequel.listByEmail(req.query.email).then(function(data) {
res.send(data);
});
});
};
This is a very basic example of using Promise
to handle asynchronous calls in node. You should study a little bit how this works. You can start for example by reading this: https://www.promisejs/
UPD Once you understand how to deal with callbacks, you'd better to look towards Promises, async/await, and async.js
Your function #findByEmail is asynchronous, so possibly your route should look like
'use strict';
module.exports = function(app) {
var sequel = require('../controllers/sampleController');
app.get('/task?:email', function(req, res){
sequel.listByEmail(req.query.email, function(err, list){
if(err){
console.error(err);
//handle error
}
res.send(list);
})
});
};
and your #listByEmail function should be like
'use strict';
var apiKey = '1xxxxxxxxL';
exports.listByEmail = function(emailid, callback) {
console.log(emailid);
if(emailid != null && emailid != undefined) {
var xyz = require("xyz-api")(apiKey);
xyz.person.findByEmail(emailid, function(err, data) {
if(err){
callback(err);
} else if(data.status == 200){
callback(null, data);
}
});
}
};
本文标签: javascripthow to return response to REST api in node jsStack Overflow
版权声明:本文标题:javascript - how to return response to REST api in node js - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744304512a2599744.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论