如何将两个猫鼬查找查询提交到正确的GET路由?

时间:2019-01-03 20:47:08

标签: javascript node.js express

我有两个单独的app.get路由,它们呈现“ /”并包含猫鼬find {}方法,该方法与两个mongodb集合有关。然后,我将使用在表单上输入的数据将相应的发布路线重定向/发布到“ /”。

根据我使用的表单(devportals / new或Writingportals / new)提交数据,我希望它使用正确的app.get查找数据,然后填充index.ejs文件以显示新的条目。

提交帖子时,即使我通过Writingportals表单向mongodb提交了更新,它也始终默认为顶部的devportal.find {} GET路由。

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 :(得分:2)

  

我有两个单独的app.get路由,它们呈现“ /”

您的端点不呈现“ /”,它们基于请求uri(在您的情况下为“ /”)触发。

接下来,您不能有两个具有相同路由和相同请求类型的端点,这对于任何Web服务器都是如此。因此,在您的情况下,您为GET请求向'/'定义了两个端点。您的代码无法理解这两条路线之间的区别,因此它将始终命中所找到的第一个路线。

最后,我将为您的解决方案添加一个,因为您要使用带有数据模型的模板并发送回标记,所以您绝对希望使用唯一的终结点。...基本上每个页面都有一个终结点。

我会说我不是这种方法的忠实拥护者。我认为使用react这样的框架可以使工作变得更轻松,然后让每个请求'/'返回带有引用您的react代码的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);
  })
})

然后请求网址将为GET -> /api/collection?collection=NAME_OF_YOUR_COLLECTION