未捕获的SyntaxError:意外的令牌var Node.js

我正在使用Node.js,并试图显示一个图表,生成的坐标从一个txt文件,被上传到服务器。 我的问题:当我打开网页上传文件,一切正常,但图表不工作:我得到以下错误: UncaughtSyntaxError:意外的令牌var。

如果我呈现没有node.js的网页一切正常。

代码:

var express = require("express"); var app = express(); var fs = require('fs'); // we will need it for file uploads var port = process.env.PORT || 3000; app.configure(function(){ app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(app.router); app.use(express.static(__dirname + '/public')); }); app.get('/', function(req, res) { res.send('<form method="post" enctype="multipart/form-data">' + '<p>Image: <input type="file" name="uploadfile" /></p>' + '<p><input type="submit" value="Upload" /></p>' + '</form>'); }); app.post('/', function(req, res){ // .. Upload and file reading // .. var obj[key1] (X-Values) and var obj[key2] (Y-Values) are generated // .. res.send('<head><title>Line Chart</title><script src="../Chart.js"></script><meta name = "viewport" content = "initial-scale = 1, user-scalable = no"><style>canvas{ }</style></head><body><canvas id="canvas" height="450" width="600"></canvas>' +'<script type="text/javascript">' +' ' +'var lineChartData = { ' +'labels : [ ' + obj[key1] + ' ],' +'datasets : [{' +'fillColor : "rgba(151,187,205,0.5)",' +'strokeColor : "rgba(0, 0, 0, 0.831373)",' +'pointColor : "rgba(151,187,205,1)",' +'pointStrokeColor : "gba(76, 255, 178, 0.831373)",' +'data : ['+ obj[key2] + ' ]' +'} ] } ' +'var myLine = new Chart(document.getElementById("canvas").getContext("2d")).Line(lineChartData);' +'</script>' +'</body></html>' ); }; }); }); }); app.listen(port, function() { console.log("Listening on " + port); }); 

我希望你可以帮助我..

问候,

JS

既然你不在你的代码示例中使用换行符,这将是输出:

 var lineChartData = { labels : [ undefined ],datasets : [{fillColor : "rgba(151,187,205,0.5)",strokeColor : "rgba(0, 0, 0, 0.831373)",pointColor : "rgba(151,187,205,1)",pointStrokeColor : "gba(76, 255, 178, 0.831373)",data : [undefined ]} ] } var myLine = new Chart(document.getElementById("canvas").getContext("2d")).Line(lineChartData); 

哪个是无效的Javascript,因为你需要closures'lineChardData'对象;

改变它,这将工作:

 res.send('<head><title>Line Chart</title><script src="../Chart.js"></script><meta name = "viewport" content = "initial-scale = 1, user-scalable = no"><style>canvas{ }</style></head><body><canvas id="canvas" height="450" width="600"></canvas>' +'<script type="text/javascript">' +' ' +'var lineChartData = { ' +'labels : [ ' + obj[key1] + ' ],' +'datasets : [{' +'fillColor : "rgba(151,187,205,0.5)",' +'strokeColor : "rgba(0, 0, 0, 0.831373)",' +'pointColor : "rgba(151,187,205,1)",' +'pointStrokeColor : "gba(76, 255, 178, 0.831373)",' +'data : ['+ obj[key2] + ' ]' +'} ] }; ' +'var myLine = new Chart(document.getElementById("canvas").getContext("2d")).Line(lineChartData);' +'</script>' +'</body></html>' ); 

我也不认为这是直接从Node.js输出HTML / JavaScript数据是好的或好的做法..

您没有发送任何换行符(裁减)JavaScript解释器看到以下无效的代码:

 var lineChartData = { /*...*/} var myLine = new Chart(/*...*/); 

在第一个var语句之后加上一个分号,它将起作用:

 var lineChartData = { /*...*/}; var myLine = new Chart(/*...*/); // ^ Put me here 

如果在输出中出现换行符,ASI就会插入分号,所以这是另一种可能的解决scheme。