簡體   English   中英

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

[英]Uncaught SyntaxError: Unexpected token 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,因為您需要使用;來關閉'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那樣使用分號來工作,因此這是另一種可能的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM