2016-09-12 2 views
-1

Beim Versuch URL zuzugreifen http://localhost:8000/data/event/1 ich eine Störung erhalten sagennode.js Routing Problem, während folgende Winkel grundlegenden Kurs

kann nicht/data/Event/1

Mein Web-Server js Code ist unter und folgende habe ich die Verzeichnisstruktur zur Verfügung gestellt. Es scheint ein Routing-Problem zu sein, aber ich bin nicht in der Lage, was falsch ist.

Ich suche JSON-Datei mit Knoten zu dienen.

var express = require('express'); 
var path = require('path'); 
var events = require('./eventsController'); 
var app = express(); 
var rootPath = path.normalize(__dirname + '/../'); 
console.log(__dirname); 
var bodyParser = require('body-parser'); 

app.use(bodyParser.urlencoded({extended: true})); 
app.use(bodyParser.json()); 
app.use(express.static(rootPath + '/app')); 


app.get('data/event/:id',events.get); 
app.post('data/event/:id',events.save); 

app.listen(8000); 
console.log('Listening on port ' + 8000 + '...') 

Verzeichnisstruktur

DemoApp 
app 
    css 
    data 
    event 
     1.json 
     2.json 
scripts 
    node_modules 
    eventsController 
    web-server 

Ereignisverwalter Probe get Code

var fs = require('fs'); 

module.exports.get = function(req, res) { 
    var event = fs.readFileSync('app/data/event/' + req.params.id + '.json', 'utf8'); 
    res.setHeader('Content-Type', 'application/json'); 
    res.send(event); 
}; 
+0

Das sieht insgesamt gut aus. Sehen Sie Fehler in Ihrer Node-Konsole? – nikjohn

Antwort

0

Ihr Problem ist die Art und Weise Sie Ihre Routen definiert haben, die sie benötigen, ein führender /

// Incorrect 
app.get('data/event/:id',events.get); 
app.post('data/event/:id',events.save); 

// Correct 
app.get('/data/event/:id',events.get); 
app.post('/data/event/:id',events.save); 

Noch ein Kommentar, wie Sie die Datei lesen. Ich würde fs.readFileSync() nicht innerhalb Ihrer Route verwenden. Dies wird Ihren gesamten Server davon abhalten, Anfragen zu bearbeiten/zu antworten, bis das Lesen der Datei abgeschlossen ist. Stattdessen würde ich die asynchrone Version verwenden und dann von dem Rückruf von fs.readFile() antworten.

module.exports.get = (req, res) => { 
    fs.readFile('app/data/event/' + req.params.id + '.json', 'utf8', (err, json) => { 
     // If an error occurred reading the file 
     // send back a 500 INTERNAL SERVER ERROR 
     if (err) return res.sendStatus(500); 

     // Return a JSON response 
     // automatically sets Content-Type to application/json 
     return res.json(json); 
    }); 
}; 
+0

Möchten Sie wissen, warum jemand abgelehnt wurde? Kommentar zu erklären, warum würde geschätzt werden. – peteb

+0

Danke, dass es funktioniert – Abhi9

+0

@ Abhi9 Froh, dass es geholfen hat, wenn dies die Antwort war, markieren Sie es als die Antwort, so dass die Leute in der Zukunft wissen, dass dies das Problem gelöst hat. – peteb