0

我正在尝试验证一个表单,它工作正常,直到 mysql 发挥作用。当我验证validemail的数据并且字段是否为空但是当我尝试将数据与我的数据库匹配时,它会向ejs页面呈现错误,但不会呈现数据。

//formvalidation.js
var body = '';
    if(req.method === 'POST'){
       // res.end('post');
       console.log('Request found with POST method');     
        req.on('data', function (data) {
            body += data;
            console.log('got data:'+data);
        });
        req.on('end', function () {
            var errorsFound=false;
            var POST = qs.parse(body);

            try
            {
                check(POST.email,'email').notEmpty().isEmail();
                check(POST.pw,'pw').notEmpty();
            }
            catch(e)
            {
                errorsFound=true;
                console.log("e value: "+e.message);
                switch(e.message)
                {
                    case 'email':
                        emsg[0]='Enter Valid Email';
                        break;
                    case 'pw':
                        psw[0]='pls Enter Password';

                        break;
                }
            }
            if(errorsFound==false)
            {
                var mysql      = require('mysql');
                var connection = mysql.createConnection({
                  host     : 'localhost',
                  user     : 'root',
                  password : '',
                  database : 'docs',
                });

                    connection.connect(function(err) {
                      if (err) throw err;
                    });
                    var query=connection.query('SELECT * from user where username= '+connection.escape(POST.email)+' and password= '+connection.escape(POST.pw),function(err, rows) {
                    if(err) console.log(err);

                    console.log(rows.length);//it prints correct number of rows
                    console.log(query.sql);// it prints correct query that i intend to do

但是在这之后没有任何效果,无论是 if 还是 else,我都删除了 if 并给出了输入,以便至少查询得到一行,然后它在 else 部分打印东西,但数组没有传递给 form.ejs

                        if(rows.length)
                        {
                            res.end("You have successfully submitted a form");
                        }
                        else
                        {
                            values[0]=POST.email;
                            values[1]=POST.pw;
                            dberror[0]="Invalid username/password"
                            console.log(values);
                            console.log(dberror);
                            fs.readFile(__dirname + '/form.ejs','utf8', function (err, data) {
                            if (err) console.log(err);
                            //res.writeHead(200, {'Content-Type': 'text/html'});
                            var r=ejs.render(data,{
                            emailError:emsg,
                            pwError:psw,
                            values:values,
                            dberrors:dberror

                            });
                            res.write(r);
                            res.end();
                          });
                        }

                    });
                    connection.end();
                }
                else// this part works fine even both part contains exactly same code
                {
                    console.log(emsg);
                    console.log(psw);
                    values[0]=POST.email;
                    values[1]=POST.pw;
                    console.log(values);
                    fs.readFile(__dirname + '/form.ejs','utf8', function (err, data) {
                    if (err) console.log(err);
                    res.writeHead(200, {'Content-Type': 'text/html'});
                    var r=ejs.render(data,{
                    emailError:emsg,
                    pwError:psw,
                    values:values,
                    dberrors:dberror

                    });
                    res.write(r);
                    res.end();
                  });
                }
            });

这是form.ejs

<body>
    <div>
        <form class="form-horizontal" method="post">
        <div class="control-group">
        <label class="control-label" for="inputEmail">Email</label>
        <div class="controls">
        <input type="text" name="email" id="inputEmail" placeholder="Email" <% if (values.length) { %>value='<%= values[0] %>'<% } %>>
        </div>
        </div>
        <% if (emailError.length) { %><div class='error'><%= emailError[0] %></div><% } %>
        <div class="control-group">
        <label class="control-label" for="inputPassword">Password</label>
        <div class="controls">
        <input type="password" name="pw" id="inputPassword" placeholder="Password" <% if (values.length) { %>value='<%= values[1] %>'<% } %>>
        </div>
        </div>
        <% if (pwError.length) { %>
        <% pwError.forEach(function(name){ %>
        <div class='error'><%= name %></div>
        <% }) %>
        <% } %>
        <div class="control-group">
        <div class="controls">
        <label class="checkbox">
        <input type="checkbox"> Remember me
        </label>
        <button type="submit" class="btn">Sign in</button>
        <% if (dberrors.length) { %><div class='error'><%= dberrors[0] %></div><% } %>
        </div>
        </div>
        </form>
    </div>
    </body>

你需要知道更多才能回答吗?随时问

4

0 回答 0