寻找访问字符串的猫鼬数组

Posted

技术标签:

【中文标题】寻找访问字符串的猫鼬数组【英文标题】:Looking to access mongoose array of strings 【发布时间】:2016-10-05 14:19:34 【问题描述】:

我能够从我的架构中访问所有元素,除了对我来说很棘手的数组。当我上传图片并使用开发人员控制台查看图片的链接时,它会显示“/lock.png”类似的内容并且它不显示图片只是正确加载图片。所以基本上我需要帮助保存数组元素,然后为图像加载它们:[String]

谢谢

app.js

    var postSchema = new mongoose.Schema(
        title:String,
        price:Number,
        name: String,
        image: String,
        images: [String],
        desc: String

    )

app.post("/posts", function(req, res) 

    //get data from and add to posts array

    var title = req.body.title;
    var price = req.body.price;
    var image = req.body.image;
    var desc = req.body.desc;
    var images = req.body.images;

    var newPost =  title: title, price: price, images: images, image: image, desc: desc;

    //create new post and save to database
    postModel.create(newPost, function(err, newlyCreated) 
        if(err)
            console.log("error with new post");
        else
            res.redirect("/posts");
        
    );

    //posts.unshift(newPost);

在我的 ejs 文件中

<input name="images" class="uploadFile btn btn-primary btn-block" type="file" multiple id="gallery-photo-add" placeholder="Choose File" >


<% posts.forEach(function(post)  %>
                            <div class = "row">
                              <div class ="col-xs-8">
                                <p><%= post.title %></p>
                              </div>
                              <div class ="col-xs-4">
                                <p>$<%= post.price %></p>
                              </div>
                            </div>

                                <% if(post.image === "") %>

                               <%  else               %>
                                    <img class="img-rounded img-responsive half img-thumbnail" src="<%= post.image %>"> 
                                <%         %>


                            <img class="img-rounded img-responsive half img-thumbnail" src="<%= post.images %>">



                            <p><%= post.desc%></p>
                            <p>
                              <a href="/posts/<%= post._id %>" class="btn btn-md btn-primary ">More Info</a>
                            </p>

                    <% ); %>       

<script type="text/javascript">




$(function() 
    // Multiple images preview in browser
    var imagesPreview = function(input, placeToInsertImagePreview) 

        if (input.files) 
            var filesAmount = input.files.length;

            for (i = 0; i < filesAmount; i++) 
                var reader = new FileReader();

                reader.onload = function(event) 

                    $($.parsehtml('<img class="img-rounded img-responsive img-thumbnail">')).attr('src', event.target.result).appendTo(placeToInsertImagePreview);

                


                reader.readAsDataURL(input.files[i]);

                posts.images[i].set(i, input.files[i]);
            



        

    ;

    $('#gallery-photo-add').on('change', function() 

        imagesPreview(this, 'div.gallery');

    );
);
</script>

我刚刚得到这张图片

这是我的数据库中出现的内容

"_id" : ObjectId("57550dfd1fdfa6f701be755f"), "title" : "", "price" : 5555, "desc" : "", "images" : [ "city-1026227_960_720.jpg" ], " __v" : 0

【问题讨论】:

所以您没有收到任何 400 或 500 错误,说明无法在浏览器的控制台中找到图像,对吧?您设置为使用/发送静态文件对吗?你能从你的系统加载css文件吗? post.image 有效吗? 没有错误,我的 css 和所有东西都连接好了,我只是得到了上面的那张照片。 【参考方案1】:

我刚刚做了一个简单的工作示例,它以数组形式输出图像,并保存到数据库中。我看不到你在为 res.render 做什么。我的意思是在我的示例中,字符串被保存到数据库中,它显示来自远程服务器的 img http://placehold.it/350x150

var express = require("express"),
    app = express(),
    mongoose = require("mongoose"),
    ejs = require("ejs");

mongoose.connect("mongodb://localhost/arrays");

app.set("view engine" , "ejs")

var postSchema =  mongoose.Schema(
    title  : String,
    images : [String]
)

var Post = mongoose.model("posts", postSchema);

Post.remove(,function(err, data)
    console.log("removed")
)
Post.create(title : "test", images : ["http://placehold.it/350x150", "two"], function(err, data)
    if(err) throw err;
    console.log(data);
)
app.get("/", function(req, res)
    Post.findOne("title" : "test", function(err, data)
        if(err) throw err;
        res.render("array", data: data)
    )

)

app.listen(3000, function()
    console.log("listening on 3000")
)

array.ejs

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>arrays</title>
</head>
<body>
    <img src="<%= data.images %>" > 
</body>
</html>

编辑:您也可以尝试src="localhost:port/&lt;%= post.images[0] %&gt; 之类的方法,我想知道您的src="&lt;%= post.image %&gt;" 是否有效,因为如果无效,您的问题可能是您加载文件的方式而不是你使用数组的方式。

【讨论】:

以上是关于寻找访问字符串的猫鼬数组的主要内容,如果未能解决你的问题,请参考以下文章

带有部分字符串的猫鼬文本搜索

如何使用基于关键字的猫鼬在节点中进行搜索

无法查询嵌套的猫鼬数组?

更新混合类型的猫鼬嵌套数组

创建包含对象数组的猫鼬模式

嵌套数组的猫鼬$或条件