2013-11-16 2 views
0

Я пытаюсь разобрать объект из 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.

еще раз спасибо.

+0

Вы полностью не поняли асинхронный стиль программирования Node.js. Пожалуйста, прочитайте несколько руководств и сделайте очень маленькие шаги с рабочими примерами. Ваш код синхронный, который не работает. – hgoebl

+0

спасибо за ответ, но я верю, что это должно работать, хотя процедура является синхронной. – omerkarj

+0

'find' вернет курсор, но не фактические результаты. Как сказал @hgoebl, вы не занимаетесь асинхронным программированием. 'find' возвращается немедленно. – WiredPrairie

ответ

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, который лучше подходит для этого особого случая, но я не хотел слишком сильно менять код.

+0

благодарит за комментарии всех, попав в книги! (буквально ...) – omerkarj

+0

Добро пожаловать! Мы все должны были размахивать мозгами, чтобы согреться с помощью способа Node.js ;-) Было бы неплохо, если бы вы отметили ответ как правильный и/или полезный. – hgoebl

Смежные вопросы