Мангуст Сохранить Обратный звонок не работает

1

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

Я новичок в узле, поэтому любые мысли о том, как даже начать отлаживать это или думать о возможных виновниках, были бы очень благодарны!

  • 0
    Вы нашли какое-либо решение для этого ...
Теги:
mongoose

3 ответа

0
Лучший ответ

Оказывается, проблема, по-видимому, была несовместимостью между версией MongoDB, которую я использовал, и mongoose. Как только я обновил версию mongodb с помощью вызова npm upgrade mongodb, похоже, что операция сохранения начала работать

0

Вы можете настроить мангуст для использования ES6 Promises.

  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
const newPost = new post.Post({

Должно быть

const newPost = new Post({
  • 0
    У меня на самом деле уже есть операторы console.log в каждой ветви обратного вызова, как вы можете видеть выше, и ни один из них не печатается.
  • 0
    Смотрите мои изменения, я думаю, что нашел вашу проблему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню