2017-09-14 13 views
0

を使用してのMongoDBから画像のパスを取得する方法私のejsビューの画像。私はこのnodejsが初めてです。画像を表示するには を助けてください。私はBusboyを使用して、ローカルディレクトリに画像をアップロードし マングースを使用してのMongoDBへのイメージのパスを通過したが、今、私ができない に表示するためのパス を取得しているNodejs

は事前にどうもありがとうございました:)

var express = require('express'); //Express Web Server 
var busboy = require('connect-busboy'); //middleware for form/file upload 
var path = require('path');  //used for file path 
var fs = require('fs-extra');  //File System - for file manipulation 
var mongoose = require('mongoose'); 
var mongoClient = require('mongodb').mongoClient; 
var objectId = require('mongodb').ObjectId; 
var app = express(); 
app.use(busboy()); 
app.use(express.static(path.join(__dirname, 'public'))); 
mongoose.Promise = global.Promise; 

mongoose.connect('mongodb://localhost:27017/postname'); 
/* ========================================================== 
Create a Route (/upload) to handle the Form submission 
(handle POST requests to /upload) 
Express v4 Route definition 
============================================================ */ 
app.set('view engine','ejs'); 
app.use(express.static(__dirname + '/public')); 

var nameSchema = mongoose.Schema({ 
    newfile: Object, 
    path: String 
}); 

var compileSchema = mongoose.model('foods', nameSchema); 
app.get('/', function(req, res, next) { 
    res.render('index',{'title': 'New post app'}); 
}); 
app.route('/') 
    .post(function (req, res, next) { 
     var fstream; 
     req.pipe(req.busboy); 
     req.busboy.on('file', function (fieldname, file, filename) { 
      console.log("Uploading: " + filename); 
      //Path where image will be uploaded 
      fstream = fs.createWriteStream(__dirname + '/public/uploads/' + filename); 
      var dirname = path.join(__dirname + '/public/uploads/' + filename); 
      file.pipe(fstream); 
      //mongo save 
      var paths = new compileSchema({newfile : dirname, passReqToCallback: true}); 
       paths.save(function(err){ 
        if(err) throw err; 
        compileSchema.find({newfile: dirname}, (err, result) =>{ 
         console.log(); 
         return result; 
        }); 
       }); 
      fstream.on('close', function() { 
       console.log("Upload Finished of " + filename); 
       //where to go next 
       res.redirect('/profile'); 
      }); 
     }); 
    }); 
    app.get('/profile', (req, res)=>{ 
     res.render('profile',{photo: req.result}); 
    }); 
var server = app.listen(3030, function() { 
    console.log('Listening on port %d', server.address().port); 
}); 

をマイEJSファイルです:

<img src='<%= photo.newfile %>' > 
+0

私はあなたの質問をよく理解していません。イメージを表示したいルートでMongooseを使って 'path'値を取得しなければなりません。例えば、 'compileSchema.find({あなたのキー値 '}、(エラー、結果)=> {//あなたのrespoonseに渡す})' – forJ

+0

@serendipityあなたのアドバイスに従って変更しましたが、戻り値、私は上記のコードを変更しました。おじゃましてすみません。私を助けてください。ありがとうございます –

+0

@serendipity私は結果を得ました非常にありがとう!しかし、それをejsに表示する方法。それは表示されません:( –

答えて

1

これは、書き込みの典型的なプロセスであるとMongooseを使用してMongodbからの読み込み。私はあなたのストリーミングや他のものがうまく動作するかどうかはチェックしていませんが、dbワークフローはこのように優れています。あなたがファイルを正しく受信してストリーミングしていることを最初

var express = require('express'); //Express Web Server 
var busboy = require('connect-busboy'); //middleware for form/file upload 
var path = require('path');  //used for file path 
var fs = require('fs-extra');  //File System - for file manipulation 
var mongoose = require('mongoose'); 
var mongoClient = require('mongodb').mongoClient; 
var objectId = require('mongodb').ObjectId; 
var app = express(); 
app.use(busboy()); 
app.use(express.static(path.join(__dirname, 'public'))); 
mongoose.Promise = global.Promise; 

mongoose.connect('mongodb://localhost:27017/postname'); 
/* ========================================================== 
Create a Route (/upload) to handle the Form submission 
(handle POST requests to /upload) 
Express v4 Route definition 
============================================================ */ 
app.set('view engine','ejs'); 
app.use(express.static(__dirname + '/public')); 

//You can import your schema like this 
const Name = require('./name'); 

var compileSchema = mongoose.model('foods', nameSchema); 
app.get('/', function(req, res, next) { 
    res.render('index',{'title': 'New post app'}); 
}); 

//I have changed your route since it seems to be clashing with the above 
app.post('/save' ,function (req, res, next) { 
     var fstream; 
     req.pipe(req.busboy); 
     req.busboy.on('file', function (fieldname, file, filename) { 
      console.log("Uploading: " + filename); 
      //Path where image will be uploaded 
      fstream = fs.createWriteStream(__dirname + '/public/uploads/' + filename); 
      file.pipe(fstream); 
      var dirname = path.join(__dirname + '/public/uploads/' + filename); 
      //mongo save 

      fstream.on('close', function() { 
       //You can either save to mongodb after streaming closes or while it is streaming but in this case I will do it after. 
       console.log("Upload Finished of " + filename); 
       //where to go next 

       //Declare your schema object here 
       let name = new Name({ 
        newfile:'Whatever you want to store here', 
        path: path 
       }); 

       //Save your declared schema like this 
       name.save((err) => { 
        if(err) throw err; 

        console.log(`saved : ${name}`); 

        //When you redirect here, it will go to /profile route 
        res.redirect('/profile'); 
       }); 
      }); 
     }); 
    }); 
app.get('/profile', (req, res)=>{ 

    //You must retrieve from mongodb your object here if this is where you want the object to be 

    //{} empty query will find all objects in the table 
    Name.find({}, (err, result) => { 
     if(err) throw err; 
     //after everything was found, send it to front end 

     res.render('profile',{ 
      photo: req.result, 
      //Now your 'compileSchema' object is available at front end as 'result' object 
      result:result 
     }); 
    }); 
}); 

var server = app.listen(3030, function() { 
    console.log('Listening on port %d', server.address().port); 
}); 

name.js(あなたが作業する各テーブルに1つのスキーマのjsファイルを作成します)

let mongoose = require('mongoose'); 
let Schema = mongoose.Schema; 

let compileSchema = new Schema({ 
    newfile: Object, 
    path: String 
}); 

let Compile = mongoose.model('Compiles', compileSchema); 

module.exports = Compile; 

チェック。あなたがそうであれば、それは正常に動作する必要があります。また、newfile:objectフィールドを保存する理由はわかりませんが、本当に必要なのは、イメージファイルへのパスを保存し、イメージを使用する場所を取得して、パスを<img src='path'>として使用することです。コメント。

関連する問題