Node.js& Express.js / Jade res.render返回res.render不是一个函数

时间:2016-06-10 07:39:38

标签: javascript node.js express

我还没有找到这个错误的答案,我想知道它是否与Express的第4版有关

controller.js

var request = require('request');

var apiOptions = {
    server : "http://localhost:3000"
};
if(process.env.NODE_ENV === 'production') {
    apiOptions.server = "https://heroku_path";
}



module.exports.homelist = function(req, res) {
    var requestOptions, path;
    path = '/api/locations';
    requestOptions = {
        url: apiOptions.server + path,
        method: "GET",
        json: {},
        qs : {
            lng : -117.929835,
            lat : 33.614675,
            max : 30000
        }
    };
    request(requestOptions, function(err, res, body) {
        renderHomepage(req, res, body);
});    

var renderHomepage = function(req, res, body) {
    res.render('jade-template', {
        title: 'I'm a main title',
        pageHeader: {
            title: 'I'm a title',
            strapline: 'I'm a strapline'
        },
        locations: body,
        sidebar: 'yadda yadda'
    });
};

从我的routes.js调用homelist函数,然后在我的请求中使用requestOptions中的查询调用我的API。

然而,当触发请求回调并且使用API​​变量体调用renderHomepage时,我收到错误:

res.render('jade-template', {
     ^
TypeError: res.render is not a function 

我的所有路线都已设置好并且经过测试。有人有解决方案吗?

1 个答案:

答案 0 :(得分:2)

res函数中的renderHomepage参数(request的回调)与快速路由的res不同!

将您的通话request更改为:

request(requestOptions, function(err, serverRes, body) {
    renderHomepage(req, res, body);
});

然后,对request/api/locations的回复为serverRes,您发送给客户的回复为res