繁体   English   中英

在 express.js 中, res.render() 不起作用

[英]In express.js, res.render() is not working

我正在使用 facebook 登录制作一个简单的 web 应用程序。

如果点击我页面上的 Facebook 登录按钮,

FB.api(
  '/me',
      'GET',
      {"fields":"id,name,birthday,gender"},
      function(response) {
        $.post('fb_login', response, "json");
      }
    );

被调用,路由器处理“/fb_login”请求; 在路由器中,服务器检查 json 对象的 id 已经在它的数据库中。 如果没有,则应调用 res.render('signup', ...) 。 然而它没有用。 我已经检查过 res.render() 被调用了,但是页面“signup.jade”没有出现。

这是我的路由器源代码。

var express = require('express');
var router = express.Router();
var mysql = require('mysql');
var pool = mysql.createPool({
    host: 'localhost',
    user: 'root',
    password: '1012'
});

/* GET home page. */
router.post('/', function(req, res, next) {
var userid = req.body.id;
if (userid) {
    pool.getConnection(function(err, connection) {
        if (err) {
            console.error('DB Connection error!!');
            return;
        }
        console.log('DB Connection Success!!');
        connection.query('use vasket');
        connection.query('select count(*) result from user where userID=?', 
        [userid], function(err, result, field) {
            var isAlreadyUser = result[0].result;
            console.log(isAlreadyUser);
            if (isAlreadyUser == 1) {
                req.session.userid = userid;
                res.redirect('/');
                res.end();
                console.log('DB FB Login Success!!');
                connection.release();
            }
            else {
                connection.release();
                console.log('FIRST TIME!');
                //This method was called, but the page rendered didn't 
                res.render('signup', {id: req.body.id, name: req.body.name, birthday: req.body.birthday, gender: req.body.gender});
            }
        });
    });
} else {
    res.redirect('/');
    res.end();
}

我该如何解决?

为了帮助调试,也许您可​​以像这样修改代码:

// ... your code before

            else {
                connection.release();
                console.log('FIRST TIME!');


                console.log(req.body);


                //This method was called, but the page rendered didn't 
                res.render(
                  'signup', 
                  {
                    id      : req.body.id, 
                    name    : req.body.name, 
                    birthday: req.body.birthday, 
                    gender  : req.body.gender
                  } ,
                  function(err, html){
                    if(err) console.log(err);

                    console.log(html);                        
                    //res.send(html);
                    // trying same but forcing status
                    res.status(200).send(html);
                  }
                );
            }
        });
    });
} else {
    res.redirect('/');
    res.end();
}

这是一个较旧的问题,但仍然需要一个可靠的答案。 我遇到了完全相同的问题,但我想我已经解决了。

如果服务器返回正确的响应,那不是您的问题所在。 jQuery(在浏览器中)将呈现响应,但您必须告诉它这样做

这是我正确响应但未呈现的内容:

$("#getsome").click(function() {
    $.get("/task/create");
});

这是我如何渲染它:

$("#getsome").click(function() {
    $.get("/task/create", function( data ) {
        document.write(data);
    });
});

请注意,您可能不需要像我所做的那样替换整个DOM。

参考:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM