【问题标题】:Node/Javascript Redirect Not Working?节点/Javascript 重定向不起作用?
【发布时间】:2016-07-27 11:40:40
【问题描述】:

我已经构建了一个表单来将一些虚拟数据添加到 Mongo 集合以进行测试。添加数据的功能似乎工作正常,因为正在添加数据,但是由于某种原因,函数末尾的重定向命令没有做它的事情。数据来自沼泽标准 HTML 表单。添加数据的代码如下:

router.post('/addacc',function(req,res){
    var sljEdate = "";
    var pljEdate = "";
    var MongoClient = mongodb.MongoClient;
    var url = 'mongodb://localhost:27017/stc';
    MongoClient.connect(url,function(err,db){
        if(err){
            console.log("Connection Error");
        }else{
            console.log("connected to mongo");
            var collection = db.collection('account');
            var query = {accountID: req.body.acc_id,companyName: req.body.acc_name,companyEmail:req.body.acc_email,companyPhone:req.body.acc_phone,companyPostCode:req.body.acc_postcode,
                        photographers: {phtID:"",phtName:"",phtPhone:"",phtEmail:"",phtLoc:"",preferredContact:"",lastJob:"",pljEpoch:pljEdate,phtNotes:""},
                        schools: {schoolID:"",schoolName:"",schoolPhone:"",schoolEmail:"",schoolPostCode:"",lastJob:"",sljEpoch:sljEdate,notes:""}};
            collection.insert(query,function(err,result){
                if(err){
                    console.log("Error inserting Account record",err);
                }else{
                    console.log("Data Insert Success");
                    res.redirect("/forms");
                }
                db.close();
            });
        }
    });
});

我在几个地方添加了行来登录到控制台,以便我可以检查进度并且它们都会触发,包括最后的“数据插入成功”。然而,紧随其后的 res.redirect 什么也不做。在浏览器中,URL 保持为“/addacc”,尽管节点控制台显示了“/forms”URL 的后续 GET。

我尝试了一些重定向的变体,例如使用res.send("test") 只是为了尝试输出一些东西,也是一个 res.render 函数,但它们似乎都不起作用。

我很确定我错过了一些简单的东西,但是我盯着代码看太久了,我看不出它有什么问题。事实上,我曾多次使用几乎相同的代码。这次我唯一不同的是,我正在插入一个包含嵌入式文档的 Mongo 集合,但数据插入不是问题,因为数据很好。

请帮忙!

【问题讨论】:

  • 我认为重定向 POST 请求有点不同。见:stackoverflow.com/questions/17612695/…
  • 好的,这很有趣,很有帮助,谢谢。我会有更多的戏剧,看看它是否能把我带到任何地方。

标签: javascript node.js mongodb redirect pug


【解决方案1】:

好的,上面的 Node 问题似乎有点牵强附会。重定向实际上工作正常(无论如何,MrWillihog 的上述评论已适当注明以供将来参考)。我认为这一定是因为 npm 控制台上的所有响应代码都检查得很好。问题实际上与 Jade 模板的渲染有关。特别是与我用来设置 HTML 头的文件 layout.jade 有关。出于某种原因(尚未确定),直接在 URL 中调用 /forms 页面时一切正常。文件 forms.jade 以标准方式以

开头
extends layout

block content

使用 layout.jade 中的开始 BODY 标记,当从重定向调用时页面无法正确加载:layout.jade 文件呈现(我在其中放置了 H1 进行检查),但 forms.jade 没有。

我将 BODY 向下移动到 forms.jade(在 block.content 下),它开始工作了,但有趣的是,地址栏中的 URL 仍然是 '/accadd'

我再次感到有些困惑,因为我已经多次使用这种模式而没有问题。我猜我只是忘记了一些简单的事情。我会继续挖掘,直到找到答案,但至少现在我应该找对地方了。

【讨论】:

    猜你喜欢
    • 2013-01-10
    • 1970-01-01
    • 2014-01-19
    • 2023-03-14
    • 1970-01-01
    • 2014-01-09
    • 2017-10-06
    • 2014-09-29
    • 2012-04-15
    相关资源
    最近更新 更多