2016-03-30 8 views
0

私はNodeJSに以下のログイン/サインアップAPIを持っています。これまでのところ、ログインルートを除くすべてが機能しています。私は既存のユーザー名とパスワードでログインしようとするたびに、私は次のエラーを取得する:未定義の投稿本体変数

Cannot read property 'username$#39; from undefined

エラーは、この場所でapi.jsにトリガー:username: req.body.username

また、そのときに私を知っているに役立つかもしれませんreq.bodyのコンソールログを取得します。出力はundefinedです。

以下は私のサーバーとAPIのjavascriptファイルです。私のコードに何が間違っているかについての洞察を提供するのに十分です。ソリューションを見つけるために必要な場合には、より多くのコードを提供することができます。

FYI:私はチュートリアルに基づいて学習していますので、私はこの問題について深い知識がないと仮定してください。

server.js

var express = require('express'), 
    bodyParser = require('body-parser'), 
    morgan =  require('morgan'), 
    config =  require('./config'), 
    mongoose = require('mongoose'), 
    app =  express(); 

mongoose.connect(config.database, function(err){ 
    if(err){ 
     console.log(err); 
    } 
    else { 
     console.log('Connected to the database'); 
    } 
}); 

app.use(bodyParser.urlencoded({ 
    extended: true 
})); 

app.use(bodyParser.json()); 
app.use(morgan('dev')); 

// Front end API 
app.use(express.static(__dirname + '/public')); 

// Middleware API 
var api = require('./app/routes/api')(app, express); 
app.use('/api', api); 

app.get('*', function(req, res){ 
    res.sendFile(__dirname + "/public/app/views/index.html"); 
}); 

app.listen(config.port, function(err){ 
    if(err){ 
     console.log(err); 
    } 
    else { 
     console.log("Listening on port " + config.port); 
    } 
}); 

api.jsあなたはresreq逆転を持ってapi.post('/login', function(res, req){ラインで

var User = require("../models/users"), 
    Story = require("../models/story"), 
    config = require("../../config"), 
    secretKey = config.secretKey, 
    jsonwebtoken = require("jsonwebtoken"); 

function createToken(user){ 
    var token = jsonwebtoken.sign({ 
     id: user._id, 
     name: user.name, 
     username: user.username 
    }, secretKey, { 
     expirationMinute: 1440 
    }); 

    return token; 
} 

module.exports = function(app, express){ 
    var api = express.Router(); 

    api.post('/signup', function(req, res){ 
     var user = new User({ 
      name: req.param.name, 
      username: req.body.username, 
      password: req.body.password 
     }); 

     user.save(function(err){ 
      if(err){ 
       res.send(err); 
       return; 
      } 
      res.json({message: 'User has been created!'}); 
     }); 
    }); 

    api.get('/users', function(req, res){ 
     User.find({}, function(err, users){ 
      if(err){ 
       res.send(err); 
       return; 
      } 
      res.json(users); 
     }); 
    }); 

    api.post('/login', function(res, req){ 
     console.log(req.body); 
     User.findOne({ 
      username: req.body.username 
     }).select('password').exec(function(err, user){ 
      if(err){ 
       throw err; 
      } 
      if(!user){ 
       res.send({message: "User does not exist"}); 
      } 
      else if(user){ 
       var validPassword = user.comparePassword(req.body.password); 

       if(!validPassword){ 
        res.send({ 
         message:"Invalid Password" 
        }); 
       } 
       else { 
        // Token 
        var token = createToken(user); 

        res.json({ 
         success: true, 
         message: "Successful login", 
         token: token 
        }); 
       } 
      } 
     }); 
    }); 

    api.use(function(req, res, next){ 
     console.log("Somebody just came to our api"); 

     var token = req.body.token || req.param('token') || req.headers['x-access-token']; 

     // check if does not exist 
     if(token){ 
      jsonwebtoken.verify(token, superSecret, function(err, decoded){ 
       if(err){ 
        res.status(403).send({ 
         success: false, 
         message: "Failed to authenticate user" 
        }); 
       } 
       else { 
        req.decoded = decoded; 
        next(); 
       } 
      }); 
     } 
     else { 
      res.status(403).send({ 
       success: false, 
       message: 'No token provided' 
      }); 
     } 
    }); 

    api.route('/') 
     .post(function(req, res){ 
      var story = new Story({ 
       creator: req.decoded.id, 
       content: req.body.content 
      }); 

      story.save(function(err){ 
       if(err){ 
        res.send(err); 
        return; 
       } 
       res.json({message: "New Story Created"}); 
      }) 
     }) 
     .get(function(req, res){ 
      Story.find({ 
       creator: req.decoded.id 
      }, function(err, stories){ 
       if(err){ 
        res.send(err); 
        return; 
       } 
       res.json(stories); 
      }); 
     }); 

    api.get('/me', function(req, res){ 
     res.json(req.decoded); 
    }); 

    return api; 
} 

答えて

2

それは次のようになります。

api.post('/login', function(req, res) { 
    ... 
}); 
+0

感謝!私はそれを何度やったのか何度も教えてもらえませんが、コードの残りの部分で盲目になってしまいます。 – AGE

+0

心配することなく、コーダーの最善を尽くすことができます! –

+0

合意!私はちょうどこの遅く、良い夜の睡眠は時々最高のソリューションです、もう一度おかげでコーディングを停止する必要があります! – AGE