2017-09-16 16 views
0

문서에 업로드 이미지를 작성하고 MongoDB에 경로를 저장했습니다. 이미지를 검색하는 동안 업로드중인 현재 이미지 만 표시됩니다. 나는 데이터베이스에 업로드 된 모든 이미지를 보여주고 싶다. 데이터베이스의 모든 이미지를 표시하도록 도와주세요. 는 MongoDB에서 업로드 한 모든 이미지 가져 오기

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 handlebars = require('handlebars'); 
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', 'hbs'); 
app.set('views', path.join(__dirname, 'views')); 

app.use(express.static(__dirname + '/public')); 

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

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, done){ 
    console.log("Uploading" + filename); 
    //path where the file is being uploaded 
    fstream = fs.createWriteStream(__dirname + '/public/uploads/' + filename); 
    var dirname = path.join('uploads/' + filename); 
    file.pipe(fstream); 
    fstream.on('close', function(){ 
     console.log("Upload Success" + filename); 

     let name = new Name({ 
     path: dirname 
     }); 
     name.save((err)=>{ 
     if(err) throw err; 
     console.log(`saved : ${name}`); 
     res.redirect('/profile'); 
     call(dirname); 
     }); 
    }); 
    }); 
}); 
function call(dirname){ 
Name.findOne({path: dirname}, (err, result) =>{ 
    if(err) throw err; 
    var imgpath = result.path; 
    console.log("Saved check" + imgpath); 
    app.get('/profile', (req, res) =>{ 
     res.render('profile',{ 
     photo: req.result, 
     result : imgpath 
     }); 
    }); 
    }); 
} 


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

내 name.js

은 몽구스 스키마

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

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

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

module.exports = Compile; 

보기 이미지를 표시 할 파일 파일 미리 :) 당신을 감사 하나 개의 객체를 검색 당신은 findOne를 사용하는

<html> 
    <head> 
    <title>User Profile</title> 
    </head> 
    <body> 
    <h1>Welcome</h1>{{result}}<br><br> 
    <img src="{{result}}" height="180" width="250"> 
    </body> 
</html> 

답변

0

데이터베이스에서. 모든 이미지를 검색 할 경우 코드는 다음과 같이해야합니다 그래서 :

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 handlebars = require('handlebars') 
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', 'hbs') 
app.set('views', path.join(__dirname, 'views')) 

app.use(express.static(__dirname + '/public')) 

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

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, done) { 
    console.log('Uploading' + filename) 
    // path where the file is being uploaded 
    fstream = fs.createWriteStream(__dirname + '/public/uploads/' + filename) 
    var dirname = path.join('uploads/' + filename) 
    file.pipe(fstream) 
    fstream.on('close', function() { 
     console.log('Upload Success' + filename) 

     let name = new Name({ 
     path: dirname 
     }) 
     name.save((err) => { 
     if (err) throw err 
     console.log(`saved : ${name}`) 
     res.redirect('/profile') 
     // removed call(), no need for it 
     }) 
    }) 
    }) 
}) 

app.get('/profile', (req, res) => { 
    // get all documents in the db by using find with no conditions 
    Name.find({}, (err, results) => { 
    if (err) throw err 
    var images = [] 
    for (var result of results) { 
     images.push(result.path) 
    } 
    res.render('profile', { 
     images: images 
    }) 
    }) 
}) 

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

그리고보기에 당신은 이미지를 통해 루프를 표시해야한다, 내가보기 뭔가해야 있도록 핸들을 사용하는 생각 이렇게 :

<html> 
    <head> 
    <title>User Profile</title> 
    </head> 
    <body> 
    <h1>Welcome</h1> 
    {{#each images}} 
     <img src="{{this}}" height="180" width="250"> 
    {{/each}} 
    </body> 
</html> 
+0

대단히 감사합니다. 나는 거의 일주일 동안 붙어있어. 매우 대단히 감사합니다 :) –