res.render以String格式发送数据

时间:2017-10-10 07:04:51

标签: javascript node.js ajax post

我正在使用node,express和mongoose开发一个应用程序。在我的登录模块res.render()中,该函数将代码作为字符串格式数据发送回客户端ajax调用。而我希望它呈现特定的视图。 ajax调用是post类型调用。我可以在ajax的成功字段中看到字符串格式的整个HTML。

我确实搜索过类似的问题和解决方案,但我找不到任何问题。让我知道我做错了什么。

客户端:

 $.ajax({
    type: 'POST',
    url: '/login',
    data: userDetail,
    success: function(data){
      console.log(data);
    },
    error: function(err){
      $("p").text("Invalid User Details")
    }
  });

服务器端:

app.post('/login', urlencodedParser ,function(req,res){
    console.log(req.body);
    User.find({name : req.body.name , password : req.body.pass},function(err,data){
        if (data.length != 0){
            Todo.find({},function(err,todo){
                if (err) throw err;
                var token = jwt.sign(req.body,config.secret,{
                    expiresIn : '1h'
                }); 
                res.render('todo',{
                    todos : todo,
                    token : token
                });
            });
        }
        else 
            res.status(401).json({ msg : "Invalid User" });
    });
});

1 个答案:

答案 0 :(得分:3)

Ajax调用本身不会更改浏览器中显示的内容。他们只是获取数据,而他们的Javascript代码决定了如何处理这些数据。无论是什么类型的Ajax调用,GET,POST等都是如此......

如果要更改当前页面以显示使用Ajax获取的内容,则必须自己将该内容插入当前页面。

或者,在POST的情况下,您可能想要提交HTML表单,然后浏览器将为您呈现从该表单发回的内容,但ajax帖子不会更改浏览器显示的内容所有

提交HTML表单可以通过Javascript或本机用户操作(没有任何Javascript)完成。但是,为了让浏览器为您处理结果,它必须是提交表单的浏览器,而不是发送表单的ajax调用。如果Ajax调用发送表单(如您显示的代码中那样),那么结果将返回到您的Javascript,并且由您的Javascript决定如何处理该结果(将其插入页面,等...)。