node.js - express ne rafraîchira pas les données
漂亮男人
漂亮男人 2017-05-31 10:38:55
0
2
783

Après avoir mis à jour les données dans la base de données, l'actualisation de la page n'affichera pas les nouvelles données.
Le code est le suivant
data.js

var http=require('http');
    var p = new Promise(function(resolve, reject){
        //做一些异步操作
         var json = '';
         http.get('http://localhost/getinfo', function (res) {
        res.on('data', function (data) {
        json += data;
        }).on('end',function (){
            json = JSON.parse(json);
            resolve(json);
             })
        }).on('error', function (e) {
    console.error(e);
    });
       
    }); 
module.exports=p;

index.js

var express = require('express');
var router = express.Router();
var data=require('../serve/data.js');

router.get('/', function(req, res, next) {

    data.then(function(data){
        var title=new Array;
        var img=new Array;
        var pbi=new Array;
        for(i=0;i<data.length;i++){
            title[i]=data[i].pname;
            console.log(title[i]);
            img[i]=data[i].psrc;
            pbi[i]=data[i].pbi;
        }
        if(req.session.un==null)req.session.un="未登录";
        res.render('index',{
        title:title,
        un:req.session.un,
        img:img,
        pbi:pbi
        });
        
    });
    if(req.session.un){
        console.log(req.session.un);
    }

});

/* GET login page. */

module.exports = router;

La solution est d'écrire le contenu de data.js dans index.js (l'écrire sous la fonction de contrôle de routage), alors maintenant j'ai une question, quel est le mécanisme de require ? Mais cela ne fonctionne toujours pas si je mets le require sous la fonction router.get, donc je voudrais demander comment actualiser les données si je veux les écrire séparément.

漂亮男人
漂亮男人

répondre à tous(2)
阿神

Après avoir appelé la méthode Promise, vous devez renvoyer l'objet Promise

phpcn_u1582

L'état promis est irréversible et non répétable.
Lorsque data.js est chargé, p est attribué à un objet Promise puis exécuté, puis devient l'état Résolu, puis transmis à index.js. Lorsque http.get se termine, le statut de p a été verrouillé sur Résolu (en supposant que cela réussisse). Quelle que soit la façon dont vous actualisez la page plus tard, p sera toujours le p d'origine et une nouvelle promesse ne sera pas régénérée.
Vous pouvez voir cet exemple :

var testData='testData'
var execute=0;
var testPromise = new Promise((resolve, reject) => {
    execute++;
    setTimeout(function () {
        resolve(testData);
    }, 1000);
})

testPromise.then((data) => {
    console.log(1,data);
    testData='newData'
})

setTimeout(function () {
    testPromise.then((data) => {
        console.log(2,data);
        console.log('执行次数:'+execute)
    })
}, 2000);


//最终输出
// 1 'testData'
// 2 'testData'
// 执行次数:1
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal