Отправить запрос от экспресс в mongoDB - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь разместить информацию на mongoDB с помощью Express.Все соединения с БД работают нормально, потому что запрос get работает

В моем server.js я определил схему

var todoSchema = new Schema({
    taskName: String,
    createdAt: Date,
    isDone: Boolean,
    prioraty: String
  }, {
    collection: 'tasks'
  });

var Model = mongoose.model('Model', todoSchema);

И затем запрос app.post

app.post('/tasks', function(req, res) {
  var savedata = new Model({
    'taskName': req,
    'isDone': false,
    'createdAt': Date.now(),
    'prioraty': 'medium'
  }).save(function (err, result) {
    if (err) throw err;

    if (result) {
      res.json(result)
    }
  })
});

и это вообще не работает ...

В моем интерфейсе я вызываю его нажатием кнопки, но ничего не происходит ..

  postTask(task) {
    return this.http.post('http://localhost:3000/tasks', task);
  }

Как я могу это исправить?Как уже упоминалось, запрос GET работает нормально, поэтому я надеюсь, что я на правильном пути ...

Итак, вот запрос Get например

app.get('/tasks', (req, res) => {
  Model.find({
   // 'request': query
  }, function(err, result) {
    if (err) throw err;
    if (result) {
      res.json(result)
    } else {
      res.send(JSON.stringify({
        error : 'Error'
      }))
    }
     })
    });

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Сначала вам нужно получить ответ в веб-интерфейсе

В службе:

postTask(task) {
    return this.http.post('http://localhost:3000/tasks', task);
}

Если вы используете angularjs (угловой 1 +)

Вам необходимо использовать then и catch для получения response

В контроллере:

this.service.postTask(task).then(function(response) {
    console.log(response)
}).catch(function(error) {
    console.log(error)
})

Если вы используете angular (угловой 2 +)

Вам необходимо использовать subscribe, поскольку this.http возвращает observable

В компоненте:

this.service.postTask(task).subscribe( response => {
    console.log(response)
})

Во-вторых, как упомянул @andrew,

taskName вы должны отправить string, так как выиметь taskName схему как string

var todoSchema = new Schema({
    taskName: String,
})

Обновление:

req.body Содержит пары ключ-значение данных, представленных втело запроса.По умолчанию он не определен и заполняется при использовании промежуточного программного обеспечения для разбора тела, такого как body-parser

В следующем примере показано, как использовать body-parsing middleware для заполнения req.body.

var app = require('express')();
var bodyParser = require('body-parser');

app.use(bodyParser.json()); // for parsing application/json
app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded

    app.post('/tasks', function(req, res) {
       console.log(req.body)
    });

Вот документация анализатора тела

0 голосов
/ 30 мая 2018

Глядя на ваш POST, taskName - это строка, основанная на вашей схеме, но вы передаете ей полный req объект.Это должно быть то, что свойство в req.body будет похоже на req.body.taskName, если это то, что вы передаете в своем запросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...