2017-12-03 124 views
1

我正在爲使用MongoDB後端存儲數據的簡單Web應用程序構建服務器。我實例使用新的貓鼬連接:貓鼬保存回調不起作用

mongoose.connect('mongodb://localhost:27017/callback-newsfeed-db') 

我的MongoDB的輸出似乎罰款:

2017-12-02T21:00:53.277-0800 I NETWORK [thread1] connection accepted from 127.0.0.1:52027 #86 (1 connection now open) 
2017-12-02T21:00:53.291-0800 I NETWORK [thread1] connection accepted from 127.0.0.1:52028 #87 (2 connections now open) 
2017-12-02T21:00:53.291-0800 I NETWORK [thread1] connection accepted from 127.0.0.1:52029 #88 (3 connections now open) 
2017-12-02T21:00:53.292-0800 I NETWORK [thread1] connection accepted from 127.0.0.1:52030 #89 (4 connections now open) 
2017-12-02T21:00:53.292-0800 I NETWORK [thread1] connection accepted from 127.0.0.1:52031 #90 (5 connections now open) 

我還定義了一個型號如下:

const postSchema = mongoose.Schema({ 
    api: String, 
    source: String, 
    title: String, 
    upvotes: Number 
}) 

const Post = mongoose.model('Post', postSchema) 

在我的服務器端點之一,我有以下代碼:

server.post('/posts', (request, response) => { 
    console.log("INSIDE POSTS POST") 
    const newapi = request.body.api 
    const newsource = request.body.source 
    const newtitle = request.body.title 

    if(!newapi){ 
    response.send(422, "MUST PROVIDE API TYPE") 
    return 
    }else if(!newsource){ 
    response.send(422, "MUST PROVIDE RESOURCE SOURCE") 
    return 
    }else if(!newtitle){ 
    response.send(422, "MUST PROVIDE RESOURCE TITLE") 
    return 
} 

// Add a new post 
    const newPost = new post.Post({ 
     api: newapi, 
     source: newsource, 
     title: newtitle, 
     upvotes: UPVOTE_DEFAULT 
    }) 
    console.log("ABOUT TO SAVE") 

    // Save to DB and send to client 
    newPost.save(error => { 
     console.log("SAVE ERROR ") 
     console.log(error) 
     if(error){ 
      console.log("ERROR IN NEWPOST") 
      throw error 
     }else{ 
      console.log("STATUS OK") 
      response.status(STATUS_OK) 
      response.set({'Content-type': 'application/json'}) 
      response.send(JSON.stringify(newPost)) 
     } 
     console.log("SAVE HAS COMPLETED") 
    }) 
    console.log("AFTER NEW POST") 
    }) 

現在,當我跑我的應用程序,我在控制檯看到以下的輸出:

INSIDE POSTS POST 
ABOUT TO SAVE 
AFTER NEW POST 

然而,出於某種原因(不論我等待多久)沒有newPost.save()回調以往似乎的一部分打電話。 MongoDB輸出並不表示明顯的錯誤,所以我有點失落。爲什麼會發生這種情況?

我對節點非常陌生,所以關於如何甚至去調試這個問題或思考可能的錯誤元兇的任何想法將不勝感激!

回答

0
const newPost = new post.Post({ 

應該

const newPost = new Post({ 
+0

這不能提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 - [來自評論](/ review/low-quality-posts/18136963) – Nisarg

+0

我已經在回調的每個分支中都有console.log語句,就像你上面看到的那樣,並且沒有任何一個被打印出來。 – MEric

+0

看到我的編輯,我想我找到了你的問題。 – Alan

0

您可以設置貓鼬使用ES6承諾。

mongoose.Promise = global.Promise; 
    mongoose.connect(process.env.MONGODB_URI); 

然後你可以使用

newPost.save().then(() => { 
    console.log('Everything went well'); 
    }).catch((e) => { 
    console.log('There was an error', e.message); 
    }); 
0

原來,這個問題似乎一直的MongoDB和版本我是用貓鼬之間的不兼容。一旦我通過調用npm升級mongodb來升級我的mongodb版本,保存操作似乎已開始工作