【问题标题】:Working mongo references with html forms使用 html 表单工作 mongo 引用
【发布时间】:2017-11-12 02:52:18
【问题描述】:

我正在使用一个表单和两个数据库集合,当表单提交时,来自输入元素的所有数据都存储在相应的集合中。这很容易设置像blogs[content] 这样的输入名称属性,然后在路由中使用该对象,通过.create() 将数据发送到数据库。

但是,当一个集合引用另一个集合时,我不知道该怎么做。

假设我有以下收藏:

var Blog = new mongoose.Schema({
    content: String,
    authors: [{
        type: mongoose.Schema.Types.ObjectId,
        ref: "Author"
    }]
});

var Author = new mongoose.Schema({
    name: String
});

我知道您可以直接从路由将数据与 push() 函数关联,但我想从表单本身进行。

如何从formBlog 内的authors 引用发送数据?我尝试将输入的名称设置为blogs[authors],但这不起作用,猜测没那么简单。

有可能吗?还是从路线推送是唯一的选择?

提前致谢!

编辑:我被要求提供路线代码,所以在这里

app.get("/form", function(req, res){
    Author.find({}, function(err, authors) {
        if(err)
            console.log(err);

        else
            res.render("form.ejs", {authors: authors});
    });
});

// form.ejs sends a POST request to /blogs

app.post("/blogs", function(req, res){
    Blog.create(req.body.blogs, function(err, newBlog){
        if(err)
            console.log(err);
        else
            res.redirect("/form");
    });
});

HTML 表单应该是这样的:

<form action="/blogs" method="POST">
    <select name=" HERE GOES THE name ATTRIBUTE I DON'T KNOW HOW TO SET ">
        <option value="0" selected>Authors</option>

        <% authors.forEach(function(author){ %>
            <option value="<%= author._id %>"><%= author.name %></option>
        <% }) %>
    </select>
</form>  

【问题讨论】:

    标签: node.js mongodb forms express mongoose-schema


    【解决方案1】:

    好吧,我最终可以解决它。看起来尝试将某些内容从form 直接保存到集合的引用中是一个错误,我必须首先将其存储在一个单独的变量中,如下所示:

    var variableName = req.body.inputName; 
    

    然后循环遍历它,将所有值从路由推送到集合的引用中,所以最终看起来从路由推送是唯一的选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-07
      • 1970-01-01
      相关资源
      最近更新 更多