【问题标题】:Can not read uploaded images in express.js无法在 express.js 中读取上传的图像
【发布时间】:2017-06-11 13:43:16
【问题描述】:

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

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

但是由于某种原因,当我将 locahost url 键入特定图像时,即 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')));

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

谢谢,

西奥。

【问题讨论】:

    标签: javascript node.js image rest express


    【解决方案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')));

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-13
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    相关资源
    最近更新 更多