Res.Render不是node.js中的函数错误

时间:2015-12-05 18:22:18

标签: javascript node.js express pug ibm-cloud

当我尝试运行node.js代码时,Windows 10命令提示符中出现“res.render不是函数错误”。

导致此错误的原因是什么?我可以摆脱它?

这是我的.js文件:

/*eslint-env node*/

//------------------------------------------------------------------------------
// node.js starter application for Bluemix
//------------------------------------------------------------------------------

// HTTP request - duas alternativas
var http = require('http');
var request = require('request');

// cfenv provides access to your Cloud Foundry environment
// for more info, see: https://www.npmjs.com/package/cfenv
var cfenv = require('cfenv');

//chama o express, que abre o servidor
var express = require('express');

// create a new express server 
var app = express();

// serve the files out of ./public as our main files
app.use(express.static(__dirname + '/public'));

// get the app environment from Cloud Foundry
var appEnv = cfenv.getAppEnv();

// start server on the specified port and binding host
app.listen(appEnv.port, '0.0.0.0', function() {
    // print a message when the server starts listening
    console.log("server starting on " + appEnv.url);
});


app.get('/home1', function(res){
    http.get('http://developers.agenciaideias.com.br/cotacoes/json', function(res){
		var body = '';
		res.on('data', function(chunk){
			body += chunk;
		});
		res.on('end', function(){
			var json = JSON.parse(body);
			var cotacao = json["bovespa"]["cotacao"];
			var CotacaoDolar= json["dolar"]["cotacao"];
			var VariacaoDolar=json["dolar"]["variacao"];
			var CotacaoEuro=json["euro"]["cotacao"];
			var VariacaoEuro=json["euro"]["variacao"];
			var Atualizacao=json["atualizacao"];
			
		
		res.render('cotacao.jade',{title:'Hey', message:'Sua cotação foi de'});
	
		
		});
	});
});

错误:Error Scrren

2 个答案:

答案 0 :(得分:4)

您正在处理两组HTTP请求/响应。

您收到的一个:

app.get('/home1', function(res){

和你正在制作的一个:

http.get('http://developers.agenciaideias.com.br/cotacoes/json', function(res){

...但你已经给他们相同的变量名res),所以一个人屏蔽了另一个并阻止你访问它。

更改其中一个的名称。

答案 1 :(得分:2)

我没有看到你的Express应用程序挂在哪里。为了让res.render()知道jade模板,你必须将一个jade处理程序挂钩到Express。

如果正确安装了jade,您应该可以将其挂钩到Express:

app.set('view engine', 'jade');

Express doc for this

此外,您在与res相同的范围内命名了两个参数。更改属于http.get()的第二个名称,这样您仍然可以访问作为实际Express响应对象的更高范围的名称。

app.get('/home1', function (res) {
    http.get('http://developers.agenciaideias.com.br/cotacoes/json', function (res2) {
        var body = '';
        res2.on('data', function (chunk) {
            body += chunk;
        });
        res2.on('end', function () {
            var json = JSON.parse(body);
            var cotacao = json["bovespa"]["cotacao"];
            var CotacaoDolar = json["dolar"]["cotacao"];
            var VariacaoDolar = json["dolar"]["variacao"];
            var CotacaoEuro = json["euro"]["cotacao"];
            var VariacaoEuro = json["euro"]["variacao"];
            var Atualizacao = json["atualizacao"];
            res.render('cotacao.jade', {
                title: 'Hey',
                message: 'Sua cotação foi de'
            });
        });
    });
});