我有两个单独的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("/");
}
});
});
答案 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