EJS express を使った以下環境にて。
<%- filename %> でファイル名を取得したいのですが、filename が定義されていないというエラーが出てしまいます。
因みに、EJS express ともに動作は問題なく <%- filename %> のみ取得出来ない状況です。
どなたか教えていただけませんでしょうか。
node v9.1.0
npm 5.5.1
ejs 2.5.7
express 4.16.2
test
├── node_modules
├── package-lock.json
├── package.json
├── views
│ ├── index.ejs
│
├── home.html
├── index.js
###エラーメッセージ
以下コマンド実行時にエラー発生。
$ node index.js
filename is not defined at eval (eval at compile (/Users/xxxxxx/Desktop/test/node_modules/ejs/lib/ejs.js:549:12), <anonymous>:23:17) at returnedFn (/Users/xxxxxx/Desktop/test/node_modules/ejs/lib/ejs.js:580:17) at tryHandleCache (/Users/xxxxxx/Desktop/test/node_modules/ejs/lib/ejs.js:223:34) at View.exports.renderFile [as engine] (/Users/xxxxxx/Desktop/test/node_modules/ejs/lib/ejs.js:437:10) at View.render (/Users/xxxxxx/Desktop/test/node_modules/express/lib/view.js:135:8) at tryRender (/Users/xxxxxx/Desktop/test/node_modules/express/lib/application.js:640:10) at Function.render (/Users/xxxxxx/Desktop/test/node_modules/express/lib/application.js:592:3) at ServerResponse.render (/Users/xxxxxx/Desktop/test/node_modules/express/lib/response.js:1008:7) at ReadFileContext.fs.readFile [as callback] (/Users/xxxxxx/Desktop/test/index.js:29:11) at FSReqWrap.readFileAfterOpen [as oncomplete] (fs.js:43
###該当のソースコード
■ /views/index.ejs
<html lang="ja"> <head> <meta charaset="utf-8"/> <meta name="viewport" content="width=device-width,initial-scale=1"/> <title><%= tit %> - サイト名</title> </head> <body> <%- filename %> <h1><%= tit %> - サイト名</h1> <%- lst %> <hr/> <%- con %> <hr/> <center><small>著作権表記</small></center> </body> </html>
■ index.js
"use strict"; const express = require('express'); const app = express(); const fs = require('fs'); app.set('port', (process.env.PORT || 5000)); app.set('views', __dirname + '/views'); app.set('view engine', 'ejs'); fs.readdir('./txt/', (err, files)=>{ let idx = '<a href="/">home</a>'; files.forEach( (v,i,a)=>{ if (v.match(/^(?!.).+$/i)) { idx += ' | <a href="/'+v+'">'+v+'</a>'; } }); app.get('/', (req, res)=>{ fs.readFile('./home.html', 'utf8', (err,text)=>{ res.render('index', {tit : 'home', con : text, lst : idx}); }); }); app.get('/:id', (req, res)=>{ const ttl = req.params.id; fs.readFile('./txt/'+ttl, 'utf8', (err,text)=>{ res.render('index', {tit : ttl, con : text, lst : idx}); }); }); }); app.listen(app.get('port'), ()=>{ console.log("running at localhost:" + app.get('port')) });

回答3件
あなたの回答
tips
プレビュー