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