Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Mongoose保存回调不工作_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript Mongoose保存回调不工作

Javascript Mongoose保存回调不工作,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我正在为一个使用MongoDB后端存储数据的简单web应用程序构建一个服务器。我使用以下命令实例化一个新的mongoose连接: 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 co

我正在为一个使用MongoDB后端存储数据的简单web应用程序构建一个服务器。我使用以下命令实例化一个新的mongoose连接:

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的输出没有显示明显的错误,所以我有点不知所措。为什么会这样

我对node还很陌生,所以任何关于如何调试它或思考可能的bug元凶的想法都将不胜感激

const newPost = new post.Post({
应该是

const newPost = new Post({

您可以将mongoose设置为使用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);
  });

事实证明,问题似乎是我使用的MongoDB版本和mongoose之间的不兼容。一旦我通过调用npm upgrade mongodb升级了我的mongodb版本,保存操作似乎已经开始工作了

我实际上已经在回调的每个分支中都有console.log语句,正如您在上面看到的,并且没有任何语句被打印出来。