我试图通过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。
再次感谢。答案 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
,它更适合这种特殊情况,但我不想更改你的代码。