suchen

Heim  >  Fragen und Antworten  >  Hauptteil

node.js – Express aktualisiert die Daten nicht

Nachdem ich die Daten in der Datenbank aktualisiert habe, werden beim Aktualisieren der Seite die neuen Daten nicht angezeigt.
Der Code lautet wie folgt
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;

Die Lösung besteht darin, den Inhalt in data.js in index.js zu schreiben (schreiben Sie ihn unter der Routing-Kontrollfunktion). Jetzt habe ich eine Frage: Was ist der Mechanismus von require? Wird er sofort nach der Definition ausgeführt? Aber es funktioniert immer noch nicht, wenn ich die Funktion „require“ unter die Funktion „router.get“ setze. Daher möchte ich fragen, wie ich die Daten aktualisieren kann, wenn ich sie separat schreiben möchte.

漂亮男人漂亮男人2733 Tage vor755

Antworte allen(2)Ich werde antworten

  • 阿神

    阿神2017-05-31 10:40:55

    Promise调用方法后,需要返回Promise对象吧

    Antwort
    0
  • phpcn_u1582

    phpcn_u15822017-05-31 10:40:55

    Promise状态是不可逆、不可重复的。
    当data.js被加载时,p被赋值成一个Promise对象,并在后续执行,然后变成Resolved状态,然后交给了index.js中。当http.get结束后,这个时候p的状态已经被锁定成Resolved(假定成功了),无论你后面如何刷新页面,p都还是原来的p,不会重新产生一个新的Promise。
    可以看这个例子:

    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
    

    Antwort
    0
  • StornierenAntwort