ОК, похоже, у вас две проблемы.Во-первых, вы не позволяете Mongoose подключаться к вашей базе данных, а во-вторых, вы перезаписываете переменную response.Если вы заметили свой обратный вызов .then()
в цепочке обещаний userData.save()
, вы вызываете эту переменную результата 'res', а также переменную ответа 'res' из обратного вызова маршрута.
Чтобы решить первую проблему, где-то в запуске вашего приложения, один раз вызов (вместо вашего текущего кода MongoClient)
mongoose.connect(uri)
Вы также можете использовать mongoose.createConnection (), если вы хотите более детальный контроль над соединением, или вам нужно сделать несколько соединений с разными базами данных.
Вторая проблема, ваш обработчик сообщений должен выглядеть следующим образом:
//Post using endpoint
app.post('/addevent', (req, res) => {
var userData = {
eventName: req.body.eventName
}
new eventData(userData)
.save()
.then(result => { // note the use of a different variable name
res.send(result); // also, you generally want to send *something* down that lets the user know what was saved. Maybe not the whole object, but this is illustrative and the client will at least need to know something (e.g. the id) to refer to the object by in the future.
})
.catch(err => {
res.status(400).send('unable to save to database');
});
});
Не имеет отношения к вашей проблеме, но большинство людей пишут Express API-интерфейсы в режиме RESTful.Если вы хотите следовать этому соглашению, ваши маршруты должны выглядеть примерно так:
GET /events // list the events
GET /events/:eventId // get a single event by ID
POST /events // add a new event
PUT /events/:eventId // update an existing event
DELETE /events/:eventId // remove an event