2017-02-02 8 views
2

ejsを使用して、ノードエクスプレスアプリケーションのreq.userからユーザー名を出力しようとしていますが、動作していないようです。私のユーザー名とパスワードが入って来ユーザー名をreq.userから取得して明示的に出力することはできません

これは、次のとおりです。これは

req.user: [ { _id: 5890f8a97ef995525d4b78cd, 
    username: 'dave', 
    password: 'somepassword', 
    __v: 0 } ] 

:この時点で

app.get('/', function(req, res) { 
    res.render('index', { 
     isAuthenticated: req.isAuthenticated(), 
     user: req.user 
    }); 
    console.log("req.user:", req.user); 
}); 

は、私は、端末内req.userは次のように表示され見ることができます私が持っているものは何ですか?

<!DOCTYPE html> 
<html> 
<head> 
<title>Login</title> 
<head> 
<body> 
    <% if (!isAuthenticated) { %> 
    <a href="/login">Log in here</a> 
    <% } else { %> 
    Hello, <%= user.username %>! 
    <a href="/logout">Log out</a> 
    <% } %> 
</body> 
</html> 

そして、これは、ログインフォームです:

<!DOCTYPE html> 
<html> 
<head> 
<title>Passport</title> 
<head> 
<body> 
<form action="" method="post"> 
    <input type="text" name="username" placeholder="Username"> 
    <input type="password" name="password" placeholder="Password"> 
    <input type="submit" value="Login"> 
</form> 
</body> 
</html> 

私が最初に私のindex.ejsでこれを持っていたが、それでも出力ユーザ名ませんでした。

Hello, <%= user.name %>! 

は、任意のヘルプをお願い申し上げます。

答えて

4

端末に表示されている内容に基づいて、req.userはオブジェクトを含む配列です。つまり、オブジェクトのプロパティにアクセスする前に配列の要素の1つにアクセスする必要があります。したがって

<%= user.username %><%= user[0].username %>次のようになります。

<% if (!isAuthenticated) { %> 
    <a href="/login">Log in here</a> 
<% } else { %> 
    Hello, <%= user[0].username %>! 
    <a href="/logout">Log out</a> 
<% } %> 

それとも、単にuser配列の最初の要素を渡すためにWebサービスを更新することができます:

res.render('index', { 
    isAuthenticated: req.isAuthenticated(), 
    user: req.user[0] 
}); 
<% if (!isAuthenticated) { %> 
    <a href="/login">Log in here</a> 
<% } else { %> 
    Hello, <%= user.username %>! 
    <a href="/logout">Log out</a> 
<% } %> 

あなたはかもしれませんuser配列にprev要素が含まれているかどうかを確認したいそうでない場合はエラーがスローされます。

res.render('index', { 
    isAuthenticated: req.isAuthenticated(), 
    user: (req.user && req.user.length) ? req.user[0] : {} 
}); 
+0

Josh、ご意見ありがとうございます。残念ながら、私が試した2つの変更はうまくいかなかった。'GET http:// localhost:3000/net :: ERR_CONTENT_LENGTH_MISMATCH' 「Hello、<%= user [0] .username%>!」でindex.ejsページを更新すると、このエラーが発生しました。 'TypeError:未定義のプロパティ '0'を読み取ることができません。 ' – marcusk7

+1

Josh、私はこれを動作させました。あなたの最初の解決策の一部が正しいです、私はあなたに信用を与え、ちょうどここで答えを更新します。私は 'username [0] .username'に変更し、' user:req.user'の代わりに 'username:req.user'を使用しました。 'username'のキーは、オブジェクトのプロパティーがどのように使われるかと一致する必要があります。 – marcusk7

関連する問題