我是节点js的新手 . 我正在尝试开发用于按类别列表获取项目列表的API . 为此,我创建了一个函数来从表(featured_tags)中获取所有可用的活动特征标签 . 在特色标签列表提取之后,我想从(项目)表中获取属于该特定标签的项目列表 . 任何人都可以帮助我如何在节点js . 我正在使用mysql数据库 .
我已经做了以下事情来从表中获取类别 .
route.js文件
this.app.get('/list_menu',async(request,response) =>{
var itemlist = '';
const featuretags = helper.getFeatureTag().then(function(featuredtags){
//console.log('test');
itemlist = helper.getitems(featuredtags);
});
response.status(200).json({
status:200,
message: "success",
data:itemlist
});
});
函数在helper.js文件中获取活动的特征标记
async getFeatureTag(){
return this.db.query("select * from featured_tags where status = 1 order by id desc ");
//const featuredtags = await this.db.query("select * from featured_tags where status = 1 order by id desc ");
}
在helper.js文件中获取特色标签的项目列表的功能
async getitems(featuredtags){
var itemdata = [];
var featured_tagdataset = [];
if(featuredtags.length > 0){
for (var i = 0; i < featuredtags.length; i++) {
var row = featuredtags[i];
var featurtag = {};
featurtag.id = row.id;
featurtag.featured_tag = row.featured_tag;
var itemresult = await this.db.query("SELECT * FROM `items` WHERE status = 1 and FIND_IN_SET('"+ row.id +"' ,featured_tags) > 0");
if(itemresult.length > 0){
for(var l=0; l < itemresult.length; l++){
var itemrow = itemresult[l];
var item = {};
item.id = itemrow.id;
item.category_id = row.id;
item.name = itemrow.item_name;
itemdata.push(JSON.stringify(item));
}
}
featurtag.tag_items = itemdata;
featured_tagdataset.push(featurtag);
}
//console.log(featured_tagdataset);
return featured_tagdataset;
}else{
return null;
}
}
当我在helper.js文件中的itemlist()中控制featuretag_dataset数组时,它向我展示了我必须在API响应中传递的完美响应 . 但在route.js中,它显示数据参数为空 .
任何人都可以帮助我如何在节点js中开发这种类型的API .
3 回答
这是因为 helper.getitems(featuredtags) 方法被成功调用,但发送响应不会等到方法返回响应,因为节点js是 asynchronous .
你需要以一种它应该串行工作的方式编写代码 . 我已经创建了示例您可以试试这个 .
您忘记在
roter.js
中使用await
来调用异步函数,只需将路由器更新为此您可以使用嵌套回调函数或异步等待函数或链接的promises .