Как сделать почтовый запрос к атласу mongo db, используя node.js и express.js - PullRequest
0 голосов
/ 16 декабря 2018

Я пытаюсь сделать простой почтовый запрос в Mongo Db Atlas, используя Node.js, Express.js и Mongoose.js.Я заполняю форму и отправляю запрос, но он продолжает загружаться, никаких ошибок, ничего.У кого-нибудь есть идеи?

//Require assets
const express = require('express');
const app = express();
const mongoose = require('mongoose');
let port = 3000;

const bodyParser = require('body-parser');

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

const MongoClient = require('mongodb').MongoClient;
const uri = 'mongodb+srv://michael:<PASSWORD-GOES-HERE>@around-town-vsisv.mongodb.net/admin';
const client = new MongoClient(uri, { useNewUrlParser: true });

client.connect(err => {
    const collection = client.db('around_town_db').collection('events');
   // perform actions on the collection object
    client.close();
});

mongoose.Promise = global.Promise;

var eventSchema = mongoose.Schema({
    eventName: String,
})

var eventData = mongoose.model('Event', eventSchema);

//Load index page using endpoint
app.get('/', (req, res) => {
    res.sendFile(__dirname + '/index.html');
});

//Post using endpoint
app.post('/addevent', (req, res) => {
    var userData = {
       eventName: req.body.eventName 
    }
    new eventData(userData)
    .save()
   .then(res => {
     res.send('item saved to database');
   })
   .catch(err => {
     res.status(400).send('unable to save to database');
   });
});

//Listen on port 3000
app.listen(port, () => {
 console.log('Server listening on port ' + port);
});

Ниже приведена простая форма для отправки почтового запроса.Любые идеи о том, что мне не хватает?

<!DOCTYPE html>
<html>
 <head>
 <title>Add a local event</title>
 </head>

 <body>
 <div class="app">
    <h1>Add an event</h1>
    <form method="post" action="/addevent">
    <label>Enter event Name</label><br>
    <input type="text" name="eventName" placeholder="Enter event name..." required>
    <input type="submit" value="Add Event">
    </form>
 </div>
 </body>
</html>

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

ОК, похоже, у вас две проблемы.Во-первых, вы не позволяете 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
0 голосов
/ 16 декабря 2018

Попробуйте что-то вроде следующего:

app.post('/addevent', (req, res) => {
    var userData = new eventData({
       eventName: req.body.eventName 
    })

   userData.save()
   .then(res => {
     res.send('item saved to database');
   })
   .catch(err => {
     res.status(400).send('unable to save to database');
   });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...