Я пытаюсь разобрать объект из javascript (голова и тело блога) через сервер node.js и сохранить его в mongoDB.отправка данных из Javascript для сохранения в mongoDB через nodejs
это код синтаксического анализа:
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');
}
});
}
сейчас, я просто не могу заставить это работать. Я новичок в узле, и я действительно могу использовать вашу помощь!
благодаря
Редакцией: параметры, посылаемого на сохранения функций БД не были написаны правильно. , но я все еще застрял в том же месте, где данные отправляются, но не сохраняются правильно. Я думаю, что есть что-то не так с моей функции 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.
еще раз спасибо.
Вы полностью не поняли асинхронный стиль программирования Node.js. Пожалуйста, прочитайте несколько руководств и сделайте очень маленькие шаги с рабочими примерами. Ваш код синхронный, который не работает. – hgoebl
спасибо за ответ, но я верю, что это должно работать, хотя процедура является синхронной. – omerkarj
'find' вернет курсор, но не фактические результаты. Как сказал @hgoebl, вы не занимаетесь асинхронным программированием. 'find' возвращается немедленно. – WiredPrairie