从Javascript发送数据以通过nodejs保存在mongoDB中

时间:2013-11-16 08:11:59

标签: node.js mongodb parsing

我试图通过node.js服务器解析javascript(博客帖子头部和正文)中的对象,并将其保存在mongoDB中。

这是解析代码:

function saveState( event ) {

    var url = '';
    var postTitle = headerField.innerHTML;
    var article = contentField.innerHTML;
    var post = {
                    title: postTitle,
                    article: article
                };

    var postID = document.querySelector('.save').getAttribute('id');
    if(postID != "new"){
        url += "?id=" + postID
    }

    var request = new XMLHttpRequest();

    request.open("POST", "draft" + url, true);
    request.setRequestHeader("Content-Type", "application/json");
    request.send(post);
}

将其发送到此节点服务器处理程序:

app.post('/draft', routes.saveDraft);

exports.saveDraft = function(req, res){
var id = url.parse(req.url, true).query.id;
var post = db.getPostByID(id);

if(id){
  console.log('post id' + id);
  db.savePost(id, req.body.head, req.body.article);
}
else{
  db.newPost(req.body.head, req.body.article);
}

res.render('editDraft.hbs', post); //send the selected post
}; 

然后,发送到其中一个DB函数:

exports.newPost = function (postTitle, article) {
new postCatalog({title:postTitle, 
                _id:1, 
                author:'temp', 
                AuthorID:2, 
                date:'2/3/12', 
                inShort:article.substring(0,100), 
                content:article ,
                published:false
            }).save(function (err, login) {
    if (err) {
        return console.log('error');
    }
    else {
        console.log('Article saved');
    }
});
}

exports.savePost = function (id, postTitle, article) {
postCatalog.find({_id: id}).save(function (err, login) {
    if (err) {
        return console.log('error');
    }
    else {
        console.log('Draft saved');
    }
});
}

现在,我无法让这个工作.. 我是节点新手,我可以真正使用你的帮助!

感谢

EDITED: 发送到DB保存功能的参数未正确写入。 但我仍然停留在相同的地方,数据发送但未正确保存。我认为我的getPostByID函数有问题,但我无法弄清楚:

exports.getPostByID =function (id) {
var post = postCatalog.find({_id: id}, function(err, post){
    if(err) {
        return handleError(err);
    }
    else{
        if(post > 0){
            post = post[0];
        }
        return post;
    }   
});
return post;
}

我正在使用快递(包括bodyparser)和猫鼬。查看引擎是hbs。

再次感谢。

1 个答案:

答案 0 :(得分:0)

你必须以异步方式编写它,例如你的getPostByID:

exports.getPostByID = function (id, callback) {

    postCatalog.find({_id: id}, function(err, post) {
        if (err) {
            callback(err);
        }
        else if (post && post.length > 0) {
            callback(null, post[0]);
        }
        else {
            callback(null, null); // no record found
        }
    });

};   

这对你的整个代码都是如此。它完全不同,你尝试它的方式永远不会在Node.js下工作。

BTW有一个mongo-driver方法findOne,它更适合这种特殊情况,但我不想更改你的代码。