无法在express.js

时间:2017-06-11 13:43:17

标签: javascript node.js image rest express

在我的REST Api中,我正在上传一些图片。这是我的项目结构。first structure image

现在在公共文件夹中有另一个名为images的文件夹。这是我上传图片的地方。 second structure image

但是出于某种原因,当我将locahost网址键入特定图像时,即 http://127.0.0.1:61592/larissaApp/public/images/myImage-1497186011532.jpg 我在浏览器中收到此消息。

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

这是我的app.js文件。

            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;

我希望这行代码可以解决这个错误。

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

但事实并非如此。有什么想法吗?

谢谢,

西奥。

1 个答案:

答案 0 :(得分:1)

这是由于express.static()的工作原理。 如果你采用这个例子

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

const app = express();

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

app.listen(8080);

转到localhost:8080/public/images/myImage-1497186011532.jpg会产生相同的错误,但localhost:8080/images/myImage-1497186011532.jpg会有效。

如果您希望在特定路线上投放所有静态文件(例如您的例子),则需要将上一行替换为app.use('/public', express.static(path.join(__dirname, 'public')));