2017-11-02 11 views
1

私はこれに従っています(YouTube Link)ノードチュートリアルの原因私は友人のためのWebアプリケーションを構築する必要があります。彼はDynamo DBとノードjsを使う必要があり、私はこのアプリを作っている間に学んでいます。私は素晴らしいことをしていましたが、今は止まっています。NodeJSの関数間で変数を渡す

私はJWTトークンを取得しようとしていますが(ビデオに記載されています)、何も起こりません。ここに私のルートがあります:

router.post('/authenticate', (req, res, next) => { 
    const username = req.body.username; 
    const password = req.body.password; 

    USER.getUserByUsername(username, (err, user) => { 
    if (err) throw err; 
    if (!user) { 
     return res.json({ 
     success: false, 
     "msg": "User not found" 
     }); 
    } 
    User.comparePassword(password, user.password, (err, isMatch) => { 
     if (err) throw err; 
     if (isMatch) { 
     const token = jwt.sign(user, secret.secret, { 
      expiresIn: 86400 
     }); 
     res.json({ 
      success: true, 
      token: 'JWT ' + token, 
      user: { 
      user: user.username, 
      password: user.password, 
      email: USER.email 
      } 
     }); 
     } 
    }); 
    }); 
}); 

ここではパスポートのjsコード

module.exports = function (passport) { 
    let opts = {}; 
    opts.jwtFromRequest = ExtractJwt.fromAuthHeaderWithScheme('jwt'); 
    opts.secretOrKey = secret; 
    passport.use(new JwtStrategy(opts, (jwt_payload, done) => { 
    USER.getUserbyUsername(jwy_payload.user2, (err, user) => { 
     if (err) { 
     return done(err, false); 
     } 
     if (user) { 
     return done(null, user); 
     } else { 
     return done(null, false); 
     } 
    }); 
    })); 
} 

そして、ここでは、モデル内の関数は、最後の機能は、ユーザ名+パスワードを印刷しますこと

module.exports.getUserByUsername = function (user, callback) { 
    var docClient = new AWS.DynamoDB.DocumentClient(); 

    var params = { 
    TableName: "Usuarios", 
    KeyConditionExpression: "#us = :uuuu", 
    ExpressionAttributeNames: { 
     "#us": "username" 
    }, 
    ExpressionAttributeValues: { 
     ":uuuu": user 
    } 
    }; 

    docClient.query(params, function (err, data) { 
    if (err) { 
     console.error("Unable to query. Error:", JSON.stringify(err, null, 2)); 
    } else { 
     data.Items.forEach(function (item) { 
     console.log(item.username + ": " + item.password); 
     let user = item.username; 
     console.log(user); 
     return user; 
     }); 
    } 
    }); 
} 

をuser.jsのだですクエリが機能していますが、それだけです。ユーザー名とパスワードをPostmanに渡しても、私は何の応答も得られませんでした。

ありがとうございました!

+1

を交換して、コールバック

docClient.query(params, function (err, data) { if (err) { console.error("Unable to query. Error:", JSON.stringify(err, null, 2)); } else { data.Items.forEach(function (item) { console.log(item.username + ": " + item.password); let user = item.username; console.log(user); return user; }); } });

を呼び出していないようです'return user 'が' data.Items.forEach() 'の内部でやり取りするのですか?その 'return'は' .forEach() 'コールバックからのみ返ります。外部関数自体からではありません。 – jfriend00

+1

どこでも 'getUserByUsername'に渡されるコールバックを呼び出さないでください。 –

+0

返り値をforEachの外側に移動しようとしましたが、何も変更されていませんでした:( – Nico

答えて

0

あなたが何を期待されている上記のコードでは、次の1

docClient.query(params, function (err, data) { 
 
    if (err) { 
 
     console.error("Unable to query. Error:", JSON.stringify(err, null, 2)); 
 
    } else { 
 
     data.Items.forEach(function (item) { 
 
     console.log(item.username + ": " + item.password); 
 
     let user = item.username; 
 
     console.log(user); 
 
     callback(user); 
 
     }); 
 
    } 
 
    });

関連する問題