NODE.js超入門という本を参考に作りました
Express generouterを作成し、新たに'/contents'の際に表示させたいcontents.ejs index.jsを作りましたが、
http://localhost:3000/は表示されますが、http://localhost:3000/contentsがエラーになり表示されません
エラーになるhttp://localhost:3000/contents
contents.js
contents.ejs
app.jsのコード
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var dexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var contents=require('./routes/contents');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/contens',contents);
// catch 404 and forward to error handler
app.use(function(req, res, next) {logger = require('morgan');
var in
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
★app.jsにvar ejs=require('ejs');を追記しても、反映されませんでした。
回答お願いします
その後
何故かいきなり、app.jsの
// catch 404 and forward to error handler
app.use(function(req, res, next) {logger = require('morgan');
var in
next(createError(404));
});
↑の、「in」がエラーだというような文字がターミナルに出てnpm startができません
どうすればいいですか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答6件
0
contentsの404について
localhost:3000/contentsはviewsディレクトリの第一階層にありますから、contents.jsを作るのではなく、index.jsに書くほうが効率的ですし、見やすいです。
つまり、
index.js
js
1//・・・省略 2 3router.get('/contents', function(req, res, next) { 4 var data = { 5 title: 'hello!', 6 content: 'This is sample contents.' 7 }; 8 res.render('contents', data); 9}); 10 11//・・・省略
にしたほうが良いかと。(contents.jsはこの場合削除してください)
loggerのエラーについて
また、loggerについては、
app.js
js
1let logger = require('morgan');
を定義部分に追加することで対応できます。
「壊れている」と言われている404のところについて
下記のようにすることで解決できます。
app.js
js
1// catch 404 and forward to error handler 2app.use(function(req, res, next) { 3next(createError(404)); 4});
おそらくこれで現状発生している問題はすべて解決できるはずです。
あと、いちぶコードに誤字・脱字が見られるので、そのあたりはスペルチェッカーなどを使って修正するといいと思います。
投稿2022/01/19 09:51
編集2022/01/20 06:02総合スコア17
0
>ReferenceError: logger is not defined
app.jsからloggerの定義もなくなってますよ。
投稿2021/10/27 13:52
総合スコア7337
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/27 14:34
2021/10/27 14:52
2021/10/27 15:01
2021/10/27 15:05
2021/10/27 15:07
2021/10/27 15:07
2021/10/27 15:15
0
ソースコード、壊れてますよ。
↓
// catch 404 and forward to error handler app.use(function(req, res, next) {logger = require('morgan'); var in next(createError(404)); });
正しく修正してください。
↓
// catch 404 and forward to error handler app.use(function(req, res, next) { next(createError(404)); }); // error handler app.use(function(err, req, res, next) { // set locals, only providing error in development res.locals.message = err.message; res.locals.error = req.app.get("env") === "development" ? err : {}; // render the error page res.status(err.status || 500); res.render("error"); }); module.exports = app;
投稿2021/10/26 16:56
編集2021/10/26 16:58総合スコア7337
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/27 13:42
2021/10/27 13:46
2021/10/27 13:50
0
function(req, res, next) {logger = require('morgan'); var in next(createError(404)); }
ここの部分ですが、var
文の構文に誤りがありエラーが出ています。
仮に、in
という変数を宣言したい(初期化はしない)のなら
var in;
ですけど、変数in
は使われていないですよね。
この部分の意図は何ですか?要らないものなのでは?
投稿2021/10/26 16:51
総合スコア8402
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/27 13:41
2021/10/27 13:50
0
app.use('/', indexRouter); app.use('/users', usersRouter); app.use('/contens',contents);
↑、/contens
ではなく/contents
ですね。
投稿2021/10/26 16:01
総合スコア386
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/26 16:06
2021/10/27 13:51
0
質問が重複していますよね?
JavaScript - Node.jsで、ejsが表示されません|teratail
上記でも回答しましたが、localhost:3000/index
ではなく localhost/index:3000
ではないかと。
誤った回答です。無視してください。
投稿2021/10/26 15:56
編集2021/10/26 16:25総合スコア8402
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/26 16:05
2021/10/26 16:10
2021/10/26 16:24
2021/10/27 13:51
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。