Nodejs,expressjs – 如何提供延迟响应

我正在构build一个web服务,为此我使用nodejs,phantomjs和expressjs。 我正在学习所有这三个。

我想在处理完查询后为客户端提供延迟响应。 就像例如,

我正在处理来自我的客户端的某些input,然后,我想在后端处理数据,平均需要大约10秒。 然后我想把这个页面提供给客户端。

是否有可能在节点发送多个响应到相同的请求或延迟响应,以便模板将自动更新内容。

或者,我应该使用相同的方法,如将json存储在服务器中的文件中,然后使用ajax来查询页面。

请帮帮我。 这里是我写的代码,

app-server.js(主文件):

// import express module var express = require('express'); var bodyParser = require('body-parser'); var app = express(); // define all required template files to be served and also define the template engine app.engine('.html', require('ejs').__express); app.set('views', __dirname + '/views'); app.set('view engine', 'html'); // Useful modules app.use(bodyParser.json()); app.use(bodyParser.urlencoded({extended: true})); // import the routes require('./router')(app); app.listen(8080); 

router.js:

 var crypto = require('crypto'); var express = require('express'); module.exports = function (app) { // define the static routes. app.use('/static', express.static('./static')); app.use('/media', express.static('./media')); //defining the controller. var parserlib = require('./controller.js') // Define the home root path app.get('/', function (req, res) { // shows the home search page. res.render('index', {content:'template success'}); }); app.get('/search', function(req, res){ res.redirect('/'); }); app.post('/search', parserlib.parserlib); } 

controller.js:

 var crypto = require('crypto'); var path = require('path') var childProcess = require('child_process') exports.parserlib= function(req, res){ var output = ''; var url = req.body.search_url; var childArgs = [ path.join(__dirname, 'external-script.js'), url, ] // execute the script in a separate thread. childProcess.execFile(binPath, childArgs, function(err, stdout, stderr) { // handle results console.log(stdout); output = stdout; //console.log(err); //res.send(output); }); //res.send(output); }; 

所以,我想看到的是,首先发送一个响应客户端,说明其加载,然后我想更新与处理的数据。 在其他语言中,不可能发送多个响应。 不确定有关nodejs。

另外,我是否必须将json输出从已处理的lib存储到文件中,然后使用ajax进行查询? 或者有可能直接更新json对象到客户端?

谢谢

这不仅仅是HTTP的工作原理。 客户不会期望它。 这与Node或任何其他框架无关。 做你正在尝试的方法是实际发送一个事件正在加载的响应,然后有一些其他机制来报告状态。

作为一个例子,你可以devise一个RESTful API。 在那个RESTful API中,你可以定义一个创build新事物的端点:

POST / API /东西

客户会发布数据来创build一个新的东西。 响应应该是提供新创build资源的位置,例如HTTP 301到/api/things/1

如果用户转到/api/things/1并且还没有完成,那么您可以执行临时redirect(303)到/api/things/1/status来提供一些有用的状态信息,或者只是发出一个404。

如果你真的想发回服务器端的状态信息,那么你应该看看WebSocket或者一个纯粹的Socket API,这两者都不是Express提供的,但是它们都可以在Node中使用(checkout socket.io库和net核心库)