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>

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

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

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

[c] /var/www/html/node_modules/ejs/lib/ejs.js:465 throw e; ^ SyntaxError: Unexpected number while compiling ejs at Object.Function () 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) [/c]

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

index.ejsファイル

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

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

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

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