2017-06-18 39 views
0

我有以下代码从我的index.html文件中的表单获取输入,然后将POSTs转换为运行在localhost:8080的节点脚本。然后节点脚本接受输入并通过调用LUIS.ai API来查询它,然后将响应发回。但是,回复需要很长时间才能显示,我必须刷新页面并确认表单提交以获取结果。有没有更有效的方法来做到这一点。我是Node.js的新手。提交表单提交后在Node.js中发送响应的有效方式

app.js

//Modules 
var express = require('express'); 
var bodyParser = require('body-parser'); 
var request = require('request'); 
var http = require('http'); 

//Variables and definitions 
var app = express(); 
var query = null; 
//LUIS.ai URL 
var luisURL = "LUIS_API_URL"; 
var intent = null; 

//body-parser 
app.use(bodyParser.urlencoded({ extended: true })); 

//Get and handle LUIS.ai data 
function getLUISData(urlLUIS){ 
    //Get LUIS.ai JSON data 
    request({url:urlLUIS, json:true}, function (error, response, body) { 
     intent = body 
    }); 
    return intent; 
} 

//Get query from HTML form 
app.post('/query', function(request, response) { 
    query = request.body.query; 
    luisURL = luisURL.concat(encodeURIComponent(query)); 
    var data = getLUISData(luisURL); 
    response.send(data); 
}); 

app.listen(8080); 

的index.html

<!DOCTYPE html> 
<html> 
<body> 
    <form action="http://127.0.0.1:8080/query" method="post"> 
     <input type="text" name="query"/> 
     <input type="submit" value="Submit" /> 
    </form> 
</body> 
</html> 
+0

请求是异步的。尝试提出请求。 –

+0

@Dinesh对不起,我是node.js的新手,我该怎么做? –

回答

1

用承诺来处理异步。您可以阅读更多关于诺言here

function getLUISData(urlLUIS){ 
     //Get LUIS.ai JSON data 
    return new Promise((resolve, reject) => { 
     request({url:urlLUIS, json:true}, function (error, response, body) { 
      if (err) return reject(err); 
      try { 
       resolve(body); 
      } catch(e) { 
       reject(e); 
      } 
     });//end of request 

    });//end of promise 
} 

app.post('/query', function(request, response) { 
    query = request.body.query; 
    luisURL = luisURL.concat(encodeURIComponent(query)); 
    getLUISData(luisURL).then(function(data){ // execution will wait here until request completes. here promise gives you data. 
     response.send(data); 
    }); 
}); 
+0

谢谢你完美的工作! –

+0

不客气。@ NikhilRaghavendra –