2017-10-01 20 views
-1

Ich verwende Anfrage-Versprechen, um zwei JSON-Datendateien anzufordern, die lokal in meinem lokalen Projektverzeichnisordner vorhanden sind. dh:NodeJS - 'Fehler: Ungültige URI'/''

enter image description here

Allerdings bin ich ein 500 Internal Server Error bekommen, wenn die Daten in der Ansicht und meine Knoten Konsolausgaben 'Error: Invalid URI "/"',

Bitte siehe unten zu passieren versuchen:

server.js

let express = require('express'); 
    let app = express(); 
    let path = require('path'); 
    const rp = require("request-promise"); 

    //STORE PATH for local JSON files on variables 
    let guest = require('./public/data/Companies'); 
    let hotel = require('./public/data/Guests'); 

    app.set("port", process.env.PORT || 5000); 

    //GET JSON 
    //Question: Is it okay to pass uri:guest 
    app.get('/data', function(req, res) { 
     Promise.all([rp({uri: guest, json: true}), rp({uri: hotel, json: true})]).then(function([hotels, guests]) { 
      //res.json({hotels, guests}); 
      res.send({hotels, guests}); 
      console.log(hotels, guests); 
     }).catch(function(err) { 
      console.log(err); 
      res.status(500).end(); 
     }); 
    }); 


    //CATCHALL 
    app.get("/*", function(req,res){ 
     let file = req.params[0] || "/views/index.html"; 
     res.sendFile(path.join(__dirname, "/public/", file)); 
    }); 

    //SET PORT 
    app.listen(app.get("port"), function(){ 
     console.log("Listening on port: " , app.get("port")); 
    }); 

dann auf Client.js:

$(function() { 
    $.ajax({ 
     type: "GET", 
     url: "/data", 
     success: function (res) { 
      console.log(res); 
     } 
    }); 
}); 

Antwort

1

Warum sind Sie nicht einfach die Variablen zurückkehren?

ich meine:

app.get('/data', function(req, res) { 
    res.send({hotels, guests}); 
}); 
2

Warum wollen Sie Anfrage verwenden, um die Daten zu bekommen? Warum verwenden Sie das Dateisystemmodul von Node.js (fs) nicht, um die Daten zu erhalten? Wenn Sie rp() aufrufen, sollten Sie einen absoluten URI und keinen lokalen Pfad übergeben.

Um es in Ihrem Code zu verwenden, müssen Sie "promisify", um die Funktion Readfile:

let readFileAsAPromise = function(filename){ 
    return new Promise(function(resolve, reject) { 
    fs.readFile(filename, (data, err) => { 
     if(err) reject(err); 
     resolve(data) 
    }) 
    }) 
} 

Sie können dann Sie Promise.all.

+0

ber Sie pls ein Beispiel unter Verwendung von (fs) veröffentlichen beide der JSON-Dateien zu bekommen? @Olivier Liechti – tonkihonks13

Verwandte Themen