我在猜測我正在做這個錯誤的方式,應該使用promises或其他東西,但我試圖創建一個CMS,從而您可以編輯一個mongodb文檔,然後轉換成博客文章或任何模板與變量填寫。防止函數調用,直到在javascript/node.js中定義變量爲止
我的CMS創建了一個只有博客圖像,作者,標題,修改日期以及mongodb文檔_id作爲data-id屬性的博客列表。
當您點擊其中一個博客時,它通過socket.io將blogId傳遞給服務器,服務器搜索博客,然後呈現blogTemplateForm.pug文件,並將該html發送回客戶端進行客戶端檢查如果#editor容器中已經有html,則刪除該html,然後在編輯容器內追加新的html,然後用戶可以對其進行編輯。
現在這個文檔查找是由一個貓鼬模型處理的,然後我通過回調函數將res.blog設置爲該查找返回的博客,我生成了一些表單供以後使用,否則我們會使用該res .blog對象來從blogTemplate生成我們想要的html,然後將該html發送給客戶端。
這很好,但由於某些未知的原因,res.blog對象有時是不確定的,即使它真的不應該,也就是說。在接下來的功能..喜歡什麼?所以app.render()會返回一個錯誤,併爲null返回null,所以我做了一個循環來檢查博客是否在渲染模板之前被定義。但即使這樣做不起作用,因爲html有時會被視爲null ...什麼給了?!
如果你看看我的循環檢查res.blog是否定義它真的是沒有意義的,任何不確定res.blog對象是通過做它的方式。
socket.on('edit blog', function(blogId){
var res = {};
Blog.findById(blogId, function(err, blog){
res.blog = blog
res.form = Form(blog)
}).then(function(){
res.filledForm = Bridge(res.blog, res.form).getForm()
delete res.form
if (res.blog !== (undefined & null)) {
app.render(blogTemplateFormPath,{blog: res.blog}, function(err, html){
console.log(err);
console.log(html);
socket.emit('blog form', html)
})
} else while (res.blog == (undefined | null)) {
if (res.blog !== (undefined & null)) {
app.render(blogTemplateFormPath,{blog: res.blog}, function(err, html){
console.log(err);
console.log(html);
socket.emit('blog form', html)
})
}
}
})
})
我使用不同的操作數嘗試,但都無濟於事,始終返回null左右的時間
if (res.blog !== (undefined | null)) {
app.render(blogTemplateFormPath,{blog: res.blog}, function(err, html){
console.log(err);
console.log(html);
socket.emit('blog form', html)
})
} else while (res.blog == (undefined | null)) {
if (res.blog !== (undefined | null)) {
app.render(blogTemplateFormPath,{blog: res.blog}, function(err, html){
console.log(err);
console.log(html);
socket.emit('blog form', html)
})
}
}
感謝您的幫助5%。截圖是高分辨率1080p x 2,所以我認爲你將能夠看到代碼。
謝謝,完美的作品,是的,這是一些不好的代碼,我的壞。我的朋友對你很愛和幸運<3 – lopu