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.
Après avoir appelé la méthode Promise, vous devez renvoyer l'objet Promise
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 :