2017-06-11 2 views
0

In meinem REST Api lade ich einige Bilder hoch. Das ist meine Projektstruktur. first structure imageKann hochgeladene Bilder in express.js nicht lesen

Jetzt befindet sich im öffentlichen Ordner ein weiterer Ordner namens images. Hier lade ich die Bilder hoch. second structure image

jedoch aus irgendeinem Grunde, wenn ich die locahost URL zu einem bestimmten Bild eingeben dh http://127.0.0.1:61592/larissaApp/public/images/myImage-1497186011532.jpg erhalte ich diese Meldung im Browser.

Cannot GET /larissaApp/public/images/myImage-1497186011532.jpg 

Dies ist meine app.js-Datei.

  var express = require('express'); 
      var path = require('path'); 
      var favicon = require('serve-favicon'); 
      var logger = require('morgan'); 
      var cookieParser = require('cookie-parser'); 
      var bodyParser = require('body-parser'); 
      var mongoose = require('mongoose'); 
      var url = 'mongodb://localhost:27017/larissaApp'; 

      mongoose.connect(url); 
      var db = mongoose.connection; 
      db.on('error',console.error.bind(console,'connection error:')); 
      db.once('open',function(){ 
       console.log("Connected correctly to server"); 
      }); 

      var routes = require('./routes/index'); 
      var users = require('./routes/users'); 
      var newsRouter = require('./routes/newsRouter'); 
      var cityRouter = require('./routes/cityRouter'); 
      var imageRouter = require('./routes/imageRouter'); 

      var app = express(); 
      // view engine setup 
      app.set('views', path.join(__dirname, 'views')); 
      app.set('view engine', 'jade'); 
      // uncomment after placing your favicon in /public 
      //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); 
      app.use(logger('dev')); 

      app.use(bodyParser.urlencoded({ extended: false })); 
      app.use(cookieParser()); 
      app.use(express.static(path.join(__dirname, 'public'))); 
      app.use(express.static(path.join(__dirname, 'public/images'))); 
      app.use('/', routes); 
      app.use('/users', users); 
      app.use('/news',newsRouter); 
      app.use('/news',newsRouter); 
      app.use('/city',cityRouter); 
      app.use('/image',imageRouter); 

      // catch 404 and forward to error handler 
      app.use(function(req, res, next) { 
       var err = new Error('Not Found'); 
       err.status = 404; 
       next(err); 
      }); 
      // error handlers 
      // development error handler 
      // will print stacktrace 
      if (app.get('env') === 'development') { 
       app.use(function(err, req, res, next) { 
       res.status(err.status || 500); 
       res.render('error', { 
        message: err.message, 
        error: err 
       }); 
       }); 
      } 
      // production error handler 
      // no stacktraces leaked to user 
      app.use(function(err, req, res, next) { 
       res.status(err.status || 500); 
       res.render('error', { 
       message: err.message, 
       error: {} 
       }); 
      }); 
      module.exports = app; 

Ich hatte gehofft, dass diese Codezeile diesen Fehler beheben würde.

app.use(express.static(path.join(__dirname, 'public/images'))); 

aber es nicht. Irgendwelche Ideen?

Danke,

Theo.

Antwort

1

Dies ist aufgrund der Art, wie express.static() funktioniert. Wenn Sie das blanke Beispiel

const express = require('express'); 
const path = require('path'); 

const app = express(); 

app.use(express.static(path.join(__dirname, 'public'))); 

app.listen(8080); 

nehmen localhost:8080/public/images/myImage-1497186011532.jpg gehen den gleichen Fehler produzieren, wird jedoch localhost:8080/images/myImage-1497186011532.jpg arbeiten.

Wenn Sie wollen, dass alle statischen Dateien auf einer bestimmten Strecke bedient werden, wie in Ihrem exmaple, werden Sie die obige Zeile mit app.use('/public', express.static(path.join(__dirname, 'public')));

+0

Hinweis ersetzt werden soll, dass dies auch alle Unterordner berücksichtigt, so dass keine brauchen Sie diese zweite statische Middleware in Ihrem Code. – Cynigo

+0

Ich habe http: // localhost: 3000/images/myImage-1497186011532.jpg verwendet und einen 404-Fehler zurückgegeben. – Theo

Verwandte Themen