node.jsで起きたエラー

さくらのVPSにnode.jsをインストールしました。購入した本は現場で通用する力を身につける Node.jsの教科書です。この本でejsのテンプレートを使っているときにおきたエラーについてです。
※エラーが起きた原因は自分の書いたプログラムが間違っていただけです。

サンプルプログラム

sample.js

var http =require('http');
var fs =require('fs');
var url =require('url');
var ejs =require('ejs');

var index = fs.readFileSync('./index.ejs','utf8');

var datas = [//表示するデータ
{'name':'太郎','mail':'taro@domein.com','tel':'0120-66-3254'},
{'name':'二郎','mail':'jiro@domein.com','tel':'0120-454-3254'},
{'name':'三郎','mail':'saburo@domein.com','tel':'0120-454-3254'},
];

var server = http.createServer();
server.on('request', doRequest);
server.listen(8124);

//関数作成
function doRequest(req,res){
	var path = url.parse(req.url);
	
	switch(path.pathname){
		case '/':
		var tmp = ejs.render(index,{
			title:"Index Page",
			msg:"これはサンプルなのだ",
			datas:datas});

	res.setHeader('Content-Type','text/html');
	res.write(tmp);
	res.end();
	break;

	default:
	res.writeHead(200,{'Content-Type':'text/plain'});
	res.write('ERROR');
	res.end();
	break;
	};
	

};

console.log('Server running at http://127.0.0.1:8124/');

と書きました。

index.ejsファイル

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta http-equiv="content-type"
        content="text/html; charset=UTF-8">
    <title><%=title %></title>
</head>
 
 
<body>
    <header>
        <h1 id="h1"><%=title %></h1>
		<h2 id="h2"><%=msg %></h2>
    </header>
    <div role="main">
<table>
<% for(var 1 = 0;i < datas.length; i++) { %>
<tr>
<td><%= datas[i].name %></td>
<td><%= datas[i].mail %></td>
<td><%= datas[i].tel %></td>
</tr>
<% } %>
</table>
    </div>
</body>
 
</html>

この状態でアップをしてコマンドをたたきます。

[root@dns html]# node /var/www/html/sample.js

この状態でhttp://127.0.0.1:8124/にアクセスするとコマンド画面でエラーがでます。

/var/www/html/node_modules/ejs/lib/ejs.js:465
      throw e;
            ^
SyntaxError: Unexpected number while compiling ejs
    at Object.Function (<anonymous>)
    at Object.Template.compile (/var/www/html/node_modules/ejs/lib/ejs.js:455:12)
    at Object.compile (/var/www/html/node_modules/ejs/lib/ejs.js:288:16)
    at handleCache (/var/www/html/node_modules/ejs/lib/ejs.js:147:16)
    at Object.exports.render (/var/www/html/node_modules/ejs/lib/ejs.js:315:8)
    at Server.doRequest (/var/www/html/sample.js:24:17)
    at Server.emit (events.js:98:17)
    at HTTPParser.parser.onIncoming (http.js:2112:12)
    at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:121:23)
    at Socket.socket.ondata (http.js:1970:22)

このエラーについてはぐぐってもでてきませんでした。調べてみたら、このエラーはJSファイルではなくejsファイルが間違っていました。

index.ejsファイル

<% for(var 1 = 0;i < datas.length; i++) { %>

varの後が1になっていますが、正しくはiです。なので・・・

<% for(var i = 0;i < datas.length; i++) { %>

が正しいコードになります。jsが間違いとかでてくれないのでコードには気をつけないといけないです。

個人支援・寄付について

サイトラボでは個人支援・寄付を受けております。ご協力いただける方はお願いいたします。当サイトではビットコインで受け付けております。

  • ビットコイン:3LHnADwZwUbic2L45EnVJEykiG6KfbqrwS