我的第一段代码中的res.json有效,但在if语句的else部分中却无效。无效的块将检查数据库中的记录,然后尝试返回响应但未接收到响应。
我已经检查过,并且响应是一个字符串,我认为它应该可以作为代码的顶部成功返回该字符串,并显示在dialogflow中(即时通讯试图返回它)
已成功在res.json之前成功响应了响应,但我没有从请求源收到响应。
代码:
app.post('/webhook/orderinfo', (req, res) => {
const intent = req.body.queryResult.intent.displayName;
const domain = "chatbotdemo.myshopify.com";
const order = req.body.queryResult.parameters["number-sequence"];
if (intent.includes('Order Number')) {
url = "https://test-hchat.com/api/orders/" + domain + "/" + order;
request(url)
.then(function (response) {
order_res = JSON.parse(response)
order_res["fullfillmentText"] = "Hi, Please find your order details below:";
res.json({
"fulfillmentText": JSON.stringify(order_res)
})
})
.catch(function (err) {
console.log(err)
});
// THIS PART DOESNT RETURN THE RESPONSE.
} else {
const domain = 'testStore'
db.getClientsDialog(domain, intent, (response) => {
const fullResponse = response.response
res.json({
fullResponse
})
})
}
});
数据库代码:
getClientsDialog: function (domain, intent, callback) {
MongoClient.connect('mongodb://efwefewf@wefwef.mlab.com:15799/wefwef', function (err, client) {
if (err) throw err;
var db = client.db('asdsad');
db.collection('dialog').findOne({ domain: domain, intent: intent }, function (err, doc) {
if (!err) {
callback(doc)
} else {
throw err;
callback(err)
}
client.close();
});
console.dir("Called findOne");
});
}
可能是因为else语句中对res.json的第二次使用试图首先调用db,因此丢失了链接以将数据发送回去吗?