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 (
このエラーについてはぐぐってもでてきませんでした。調べてみたら、このエラーはJSファイルではなくejsファイルが間違っていました。
index.ejsファイル
<% for(var 1 = 0;i < datas.length; i++) { %>
varの後が1になっていますが、正しくはiです。なので・・・
<% for(var i = 0;i < datas.length; i++) { %>
が正しいコードになります。jsが間違いとかでてくれないのでコードには気をつけないといけないです。
