通过猫鼬发送非形式的数组

时间:2018-12-31 16:23:22

标签: javascript arrays node.js forms mongoose

我正在使用node.js创建一个Intranet应用程序,并使用body-parser和mongoose将表单数据发送到我的数据库。特定表格会在网站上发布应有的帖子。但是,我想添加该功能以将标签添加到帖子中,用户可以通过单击标签来选择该标签,然后将标签innerHTML通过Javascript添加到数组中。我想知道的是即使该数组不在表单数据中,如何通过猫鼬发送该数组以将其保存在数据库中。我该如何解决这是最好的方法?

我要发送的数组是“ tagsList”之一。

如果有什么我应该更清楚的地方,请通知我。

HTML:

<div class="ui red attached secondary segment clearfix">
  <div class="item">
    <form class ="ui form" action="/" method="POST">
        <div class="field">
            <textarea rows="1" name="post[body]" placeholder="Write a post" 
    required></textarea>

        </div>
        <div class="box">
            <div class="column" id="tagsField">
                <div class="box wrap">
                    <div class="inside"><a class="ui red tiny label" 
                    onclick="changeTag(this)">Daily Shopping</a></div>
                    <div class="inside"><a class="ui blue tiny label" 
                    onclick="changeTag(this)">Managers</a></div>
                    <div class="inside"><a class="ui orange tiny label" 
                    onclick="changeTag(this)">Lund</a></div>
                    <div class="inside"><a class="ui black tiny label" 
                    onclick="changeTag(this)">Malmör</a></div>
                </div>
            </div>
            <div class="column" id="buttonField">
            <button type="submit" class="ui positive button">Post</button>
            </div>
        </div>
    </form>
    </div>
</div>

JavaScript:

var tagsList = [];

function changeTag(i) {
    $(i).toggleClass("tag");
    var index = tagsList.indexOf(i.innerHTML);
    if(index == -1){
        tagsList.push(i.innerHTML);
    }
    else{
        tagsList.splice(index, 1);
    }
}

节点:

//SCHEMA CONFIG
var postSchema = new mongoose.Schema({
    body: String, 
    tags: [
        {
            type: String
        }
    ],
    created: {type: Date, default: Date.now}
});

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

//ROUTES
app.get("/", function(req, res){
    Post.find({}, function(err, allPosts){
        if(err){
            console.log(err);
        }else {
            res.render("index", {posts: allPosts});
        }
    });
});
app.post("/", function(req, res){
    req.body.post.body = req.sanitize(req.body.post.body);
    Post.create(req.body.post, function(err, newPost){
       if(err){
           console.log(err);
       }else{
           res.redirect("/");
       }
   }) 
});

1 个答案:

答案 0 :(得分:0)

您有Post.create()方法吗?如果是这样,请发布它,以便我可以清楚地了解您在做什么

现在看来,您在如何将数据发送到节点..上的后端发布请求时遇到了麻烦。 因此,您可以使用Jquery并使用AJAX向服务器发出asnyc请求 您可以使用Jquery的内置方法

var data ={
   // here you make your post request using a proper json annotation so that  
   // you can send the whole object to the backend without any fuss
};

$.ajax(()=>{
   method:"post",
   url:"your url end point",
   data: data, // this is you object of data you want to send to the server
   success:(data)=>{
      console.log("post success...");
   },
   error:()=>{
     console.log("500 error");
   }
});