Как я могу перезагрузить страницу автоматически в обещании nodejs после выполнения задания - PullRequest
0 голосов
/ 20 января 2019

Я получаю данные JSON и на главной странице. Перед загрузкой данных JSON на странице должен отображаться текст загрузки. После полной загрузки данных json должны полностью отобразиться данные json.

var express = require('express');
'use strict';
var https = require('https');
var app =  express();
var request = require('request');
var bodyParser =require('body-parser');
var task = [];
app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({ extended: true }));
app.listen(3000, function(){
console.log('Example app listening on port 3000 !');
});
function initialize() {
var options = {
url: 'https://jsonplaceholder.typicode.com/posts',
headers: {'User-Agent': 'request'}
};
// Return new promise 
return new Promise(function(resolve, reject) {
// Do async job
request.get(options, function(err, resp, body) {
if (err) {
reject(err);
} else {
resolve(JSON.parse(body));
}
})
})
}
app.get('/', function(req, res){
if(task.length === 0){
var initializePromise = initialize();
initializePromise.then(function(result) {
task = result;
// res.redirect('/test');
console.log("task initialized");
if(counter ===0){
res.render('index', {task: task.splice(0, lNum), loading: false});
}
}, function(err) { console.log(err); });       
}else{
console.log("task already initialized");
}
if(task.length ===0){
res.render('index', {task: null, loading: true});
}else{
res.render('index', {task: task, loading: false });
}  
});

Когда я запускаю скрипт. Это дает мне следующую ошибку

Example app listening on port 3000 !
task initialized
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at validateHeader (_http_outgoing.js:503:11)
    at ServerResponse.setHeader (_http_outgoing.js:510:3)
    at ServerResponse.header (C:\Users\Crustalmaa\Documents\sassproject\reactapp\job\node_modules\express\lib\response.js:767:10)
    at ServerResponse.send (C:\Users\Crustalmaa\Documents\sassproject\reactapp\job\node_modules\express\lib\response.js:170:12)
    at done (C:\Users\Crustalmaa\Documents\sassproject\reactapp\job\node_modules\express\lib\response.js:1004:10)
    at tryHandleCache (C:\Users\Crustalmaa\Documents\sassproject\reactapp\job\node_modules\ejs\lib\ejs.js:257:5)
    at View.exports.renderFile [as engine] (C:\Users\Crustalmaa\Documents\sassproject\reactapp\job\node_modules\ejs\lib\ejs.js:482:10)
    at View.render (C:\Users\Crustalmaa\Documents\sassproject\reactapp\job\node_modules\express\lib\view.js:135:8)
    at tryRender (C:\Users\Crustalmaa\Documents\sassproject\reactapp\job\node_modules\express\lib\application.js:640:10)
    at Function.render (C:\Users\Crustalmaa\Documents\sassproject\reactapp\job\node_modules\express\lib\application.js:592:3)
Task already initialized.

Когда я комментирую один из методов res.render в app.get ('/', function () {}) И я не знаю, как перенаправить или обновить index.ejs. в index.ejs

<% if(loading){%>
<p>Loading</p>
<%} else{%>
<% for( var i = 0; i < task.length; i++){ %>
<li><input type="checkbox" name="check" value="<%= task[i] %>" /> <%= task[i].id %> </li>
<% } } %>
<a href  = "/test">Load more</a>

Когда я запускаю localhost: 3000 first screenshot через 2 секунды обновить браузер, он дает мне следующий результат second screenshot и я не хочу вручную обновлять браузер. Когда загрузка контента завершена, он автоматически обновляет или обновляет контент. Как мне это сделать и исправить сообщение об ошибке?

...