cari

Rumah  >  Soal Jawab  >  teks badan

node.js - express tidak akan memuat semula data

Selepas saya mengemas kini data dalam pangkalan data, menyegarkan halaman tidak memaparkan data baharu.
Kod adalah seperti berikut
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;

Penyelesaian adalah dengan menulis kandungan dalam data.js ke dalam index.js (tulis di bawah fungsi kawalan penghalaan), jadi sekarang saya mempunyai soalan, apakah mekanisme memerlukan? Tetapi ia masih tidak berfungsi jika saya meletakkan keperluan di bawah fungsi router.get, jadi saya ingin bertanya bagaimana untuk menyegarkan semula data jika saya mahu menulisnya secara berasingan.

漂亮男人漂亮男人2807 hari yang lalu800

membalas semua(2)saya akan balas

  • 阿神

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

    Selepas memanggil kaedah Promise, anda perlu mengembalikan objek Promise

    balas
    0
  • phpcn_u1582

    phpcn_u15822017-05-31 10:40:55

    Status janji tidak boleh diubah dan tidak boleh diulang.
    Apabila data.js dimuatkan, p ditetapkan pada objek Promise dan kemudiannya dilaksanakan, kemudian menjadi keadaan Diselesaikan, dan kemudian diserahkan kepada index.js. Apabila http.get tamat, status p telah dikunci kepada Diselesaikan (dengan mengandaikan kejayaan tidak kira bagaimana anda memuat semula halaman itu nanti, p tetap akan menjadi p asal, dan Janji baharu tidak akan dijana semula).
    Anda boleh lihat contoh ini:

    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
    

    balas
    0
  • Batalbalas