尝试添加用户并使用JS和Handlebars渲染新页面

时间:2018-05-20 20:11:05

标签: javascript html node.js handlebars.js

我有一个允许用户输入数据的表单。 enter image description here

当用户点击"添加用户"时,将在数据库中创建用户,但该表单将保留在此页面上。它没有像我期望的那样呈现下一页。此表单使用的addUser句柄页面包含以下用于添加用户的部分。

<input id="addUser" type="submit" name="add" value="Add User" onclick="addRow()" />

addRow()函数位于我的script.js文件中,包含以下代码。

function addRow(){

    var form = document.getElementById("userForm");
    var req = new XMLHttpRequest();
          // Add the form data to the ajax request
          var queryString = "";

          var fname = form.fname.value;
          var lname = form.lname.value;
          var email = form.email.value;
          var company = form.company.value;
          var password = form.password.value;

          queryString += "fname=" + fname + "&";
          queryString += "lname=" + lname + "&";
          queryString += "email=" + email + "&";
          queryString += "company=" + company + "&";
          queryString += "password=" + password;

          //window.location.href = "/insert-user?" + queryString;

          req.open('GET', '/insert-user?' + queryString, true);

          //console.log('-->', result.response.status);

          //req.setRequestHeader('Content-Type', 'application/json');
          req.addEventListener('load', function(){
            if (req.status >= 200 && req.status < 400){

            }
          else{
                console.log("Error in network request: " + req.statusText);
          }});

          req.send();
          event.preventDefault();
          //return false;
}

为插入用户而执行的服务器端代码位于:

app.get('/insert-user',function(req,res){
  var context = {};
  pool.query("INSERT INTO user (`fname`, `lname`, `email`, `password`,`timestamp`,`company`) VALUES (?,?,?,?,NOW(),?)", 
  [req.body.fname, req.body.lname, req.body.email, req.body.password, req.body.company], 
  function(err, result){
    if(err){
      console.log(err);
      next(err);
      return;
    }
    res.render('adminDash',context);
    console.log("Success");
  });
});

我的调试声明&#34;成功&#34;打印,但我没有得到&#34; adminDash&#34;渲染。我检查了终端和控制台是否存在任何服务器错误,但它们不存在。这是有道理的,因为数据IS被插入到表中,但我无法弄清楚为什么adminDash没有呈现。我猜它一定是客户端的东西(可能在addRow()中)?有没有人有任何解决此问题的技巧,以便我可以进一步隔离问题?

1 个答案:

答案 0 :(得分:0)

您似乎没有对XMLHttpRequest的回复做任何事情。

我不会说谎:我不知道这样做的“正确”方法,因为我自己只是在学习节点/把手,但这样可行:

if (req.status >= 200 && req.status < 400){
    document.write(req.response); // write the response to the page
}

adminDash文件一无所知,我无法告诉您,在渲染调用中传递的context对象是否显然是空的。