2016-10-25 35 views
0

ejsテンプレートを使用して、nodejsとexpressで最初のwebb apを作成しています。 htmlファイルをレンダリングすると、すべて正常に動作しますが、パラメータを使ってファイルをレンダリングしようとすると、レンダリングされたejsテンプレートは、送信したパラメータを見つけることができないようです。ここレンダリングされたEjsは定義されていません

は、私のファイル構造である:

project/ 
    Views/ 
    index.ejs 
    login.ejs 
    public/ 
    all the css files .. 
    node_modules/ 
    server.js 

、ここでは私のserver.jsです:

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
    <meta charset="utf-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> 
    <meta name="description" content=""> 
    <meta name="author" content=""> 
    <link rel="icon" href="../../favicon.ico"> 

    <title>Dashboard</title> 

    </head> 

    <body> 

    <div><%= username %></div> 

    </body> 
</html> 

とのために:

var express = require('express'); 
var app = express(); 
const cookieParser = require('cookie-parser'); 
const session = require('express-session'); 
const bodyParser = require('body-parser') 

app.set('view engine', 'ejs'); 
app.use(express.static(__dirname + '/Public')); 
app.use(cookieParser()); 
app.use(session({secret: '1234567890QWERTY',resave: false, saveUninitialized: false})); // change the secret to safer one 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({extended: true})); 


app.get('/', function(req, res) { 
    if (req.session.user == undefined) { 
     // if user is not logged-in redirect back to login page // 
     res.render('login'); 
    } else { 
     console.log(req.session.user); 
     res.render('index', {username:req.session.user}); 
    } 
}); 

app.get('/login', function(req, res) { 
    res.render('login'); 
}); 


app.listen(8080); 
console.log('port: 8080'); 

、ここでは私のindex.ejsファイルです何らかの理由でindex.ejsにアクセスしようとすると、エラーが返されます - "username is not defined"

私が間違っていることは何ですか?オンラインの例は全く同じに見えます

ありがとう!

app.get('/', function(req, res) { 
    if (req.session.user == undefined) { 
     // if user is not logged-in redirect back to login page // 
     res.render('login',{username:req.session.user}); 
    } else { 
     console.log(req.session.user); 
     res.render('index', {username:req.session.user}); 
    } 
}); 

// about page 
app.get('/login', function(req, res) { 
    res.render('login',{username:req.session.user}); 
}); 
+0

見えることがありますので、あなたが/ログインreq.session.userに行くときは、設定されていないことを、ここで想定しはい? 'res.render( 'index'、{username: 'Elion'});' – adeneo

+0

のように、 'render'呼び出しが問題であるかどうかをチェックするために文字列を試しました。 varを指定して、次のようにvarをレンダリングに送ります。 var bla = "text"; res.render( 'index'、{username:bla}); –

答えて

1

初期コードでは、動作するはずです...それを見ずに、私はあなたがlogin.ejsに<%=username%>を反響させようとしていると推測しています。

更新されたコードには、存在しない変数を使用している点がいくつかあります。

if (req.session.user == undefined) { 
    res.render('login',{username:req.session.user}); 
} 

ここでは、「req.session.userが定義されていない場合は、usernameをreq.session.userに設定します(未定義)」と言っています。このビットがない

は、次に同じ...

app.get('/login', function(req, res) { 
    res.render('login',{username:req.session.user}); 
}); 

は私がなぜそのエラー...

0

私はあなたがget関数で「ユーザー名」変数が欠落していると信じて:

はファディビタールが、これは私のサーバーは、イベントがどのように見えるし、それが動作しませんSTILです取得する方法で答えた後。

あなたがしていることを確認してください: res.render( '/'、{username: "example username"});

+0

まあ、私はダブルチェックし、レンダリングのために送られた "username"のデクリメントを追加しました。私のポストを見て、私はそれの底に新しいコードを追加しました。 –

関連する問題