Как отправить два запроса на поиск мангусты на правильный маршрут GET? - PullRequest
0 голосов
/ 03 января 2019

У меня есть два отдельных маршрута app.get, которые отображают "/" и содержат методы mongoose find {}, которые относятся к двум коллекциям mongodb.Затем у меня есть соответствующие почтовые маршруты, которые перенаправляют / отправляют в "/" с данными, которые я ввел в формы.

В зависимости от формы, которую я использую (devportals / new или writingportals / new) для отправки своих данных, яхотел бы, чтобы он использовал правильный app.get для поиска данных, а затем заполнил мой файл index.ejs для отображения новой записи.

Когда я отправляю свое сообщение, он всегда по умолчанию равен devportal.find {}ПОЛУЧИТЕ маршрут вверху, хотя я отправил свое обновление в mongodb через форму Writportals.

app.get("/", function (req, res){
devportal.find({}, function(err, newDevPortal){
    if(err){
        console.log(err);
    }else{
        res.render("index",{newDevPortal: newDevPortal});
    }
});});

app.get("/", function (req, res){
writingportal.find({}, function(err, newWritingPortal){
    if(err){
        console.log(err);
    }else{
        res.render("index",{newWritingPortal: newWritingPortal});
    }
 });
});


app.get("/portals/writingportals/new", function(req, res){
    res.render("portals/writingportals/new");
});

app.get("/portals/devportals/new", function(req, res){
    res.render("portals/devportals/new");
});

app.post("/", function(req, res){
var wpTitle = req.body.writingtitle;
var wpUrl = req.body.writingurl;
var wpImageUrl = req.body.writingimageurl;

writingportal.create({title: wpTitle, url: wpUrl, imageurl: wpImageUrl},     function(err, newWritingPortal){
    if(err){
        console.log(err);
    }else{
        res.redirect("/");
    }
    });
    });

app.post("/", function(req, res){
var devTitle = req.body.writingtitle;
var devUrl = req.body.writingurl;
var devImageUrl = req.body.writingimageurl;

devportal.create({title: devTitle, url: devUrl, imageurl: devImageUrl}, function(err, newDevPortal){
    if(err){
        console.log(err);
    }else{
        res.redirect("/");
    }
    });
});

1 Ответ

0 голосов
/ 04 января 2019

У меня есть два отдельных маршрута app.get, которые отображают "/"

Ваши конечные точки не отображают "/", они запускаются на основе URI запроса, который в вашем случаеis "/".

Далее, у вас не может быть двух конечных точек с одинаковым маршрутом и одинаковым типом запроса, это верно для любого веб-сервера.Таким образом, в вашем случае у вас есть две конечные точки, определенные для запросов GET к '/'.Ваш код не может понять разницу между этими двумя маршрутами, поэтому он всегда будет попадать в первый найденный маршрут.

Наконец, я добавлю, что для вашего решения вам определенно потребуются уникальные конечные точки, потому что вы берете шаблон с моделью данных и отправляете обратную разметку ... в основном конечную точку для каждой страницы.

Скажу, что я не большой поклонник такого подхода.Я думаю, что это облегчает жизнь, используя такие фреймворки, как «реакция», затем каждый запрос к «/» возвращает index.html со ссылкой на ваш код реакции ... вместо всей сделки с SSR.

Однако длямного чего, просто использовать параметры запроса в запросе.Вот пример, где определена одна конечная точка, которая будет возвращать все данные из любой коллекции через параметры запроса:

app.get('/api/collection', function(req, res) {
  var collection = req.query.collection;
  var _collection = db.collection(collection);
  _collection.find({}).toArray(function(err, docs) {
    if (err)
      return res.status(500).send(err);
    res.send(docs);
  })
})

И тогда URL запроса будет GET -> /api/collection?collection=NAME_OF_YOUR_COLLECTION

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