0

fs.files.findAll()すべてのファイル名を取得してページに表示できるようにする必要があると考えていました。今のところ、一度に1つしか見つけられず、表示できませんでした。DB 内のすべての画像を含むインデックス ページが必要です。

const mongoose = require("mongoose");
const Grid = require("gridfs-stream");
const fs = require("fs");
const express = require("express");
const app = express("/")
mongoose.connect("mongodb://localhost/newDb");
const conn = mongoose.connection;

app.set("view engine", "ejs"); // set the view engine
app.use(express.static("public"));

const uploadImages = require("./uploadImages");
const getAllImages = require("./getAllImages");



console.log(mongoose.connection.readyState);

app.get("/:img", (req, res) => {
    getAllImages(conn, req.params.img, res)
})

app.get("/", (req, res) => {
    //render all images on page
    //how do I find how many images are in the DB
    //and to get the file names to pass to ejs
    //so I could do forloop to get // img src "/image1.jpg"
})

app.listen(3000, (err) => {
    console.log("listening on port 3000")
})

getAllImages で

const mongoose = require("mongoose");
const Grid = require("gridfs-stream");
const fs = require("fs")
function getAllImages(conn, img, response){
    const gfs = Grid(mongoose.connection.db, mongoose.mongo);
    const readStream = gfs.createReadStream({
        filename :img
    })
    readStream.on("error" , function(err){
        console.log("An error: ", err);
    })
    readStream.pipe(response);
    // mongoose.connection.db.listCollections( (err, names) => {
    //     console.log(names);
    // })


}
module.exports = getAllImages;
4

1 に答える 1

0

これが私がやった方法です:

const Schema = mongoose.Schema;
const Image = mongoose.model("Image",
            new Schema({filename : String, contentType : String, uploadDate : Date}),
            "fs.files"
            );

それから

app.get("/", (req, res) => {
    Image.find()
        .then((docs) =>{
            var imageNames = docs.map((e) => {
                return e.filename
            })
            res.render("index", {
                imageNames
            })
            console.log(docs)
        })
})

インデックスで

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>index</title>
    </head>
    <body>
        <h1>Hello</h1>
        <% imageNames.forEach((e) =>{ %>
            <a href = <%=e %>><%=e.split(".")[0]%></a>
            <img src = "/<%=e%>"> <br>
        <%})%>
    </body>
</html>

私はマングースモードを設定したくありませんでした。マングースにはそれが必要だと聞きました。gridf-stream を使用する別の方法はありますか?

于 2017-02-11T21:47:28.227 に答える