2016-03-30 10 views
0

Ich habe die folgende Login/Anmeldung API in NodeJS. Bisher funktioniert alles außer der Login-Route. Jedes Mal, wenn ich versuche, mit einem vorhandenen Benutzername und Passwort anmelden, erhalte ich folgende Fehlermeldung:Nicht definierte Post-Body-Variable

Cannot read property 'username$#39; from undefined

Der Fehler auf api.js an diesem Ort löst: username: req.body.username

Es kann auch helfen, zu wissen, dass, wenn ich Machen Sie ein Konsolenprotokoll von req.body die Ausgabe, die ich bekomme, ist undefined.

Unten finden Sie meine Server- und api-Javascript-Dateien, von denen ich hoffe, dass sie ausreichen, um Ihnen einen Einblick zu geben, was mit meinem Code nicht stimmt. Ich kann bei Bedarf mehr Code bereitstellen, um die Lösung zu finden.

FYI: Ich lerne basierend auf einem Tutorial, also bitte gehen Sie davon aus, dass ich nicht über fundierte Kenntnisse in dieser Angelegenheit verfüge.

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

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; 
} 

Antwort

2

In der Zeile api.post('/login', function(res, req){ Sie res und req umgekehrt haben.

es sein sollte:

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

Dank! Ich kann dir nicht sagen, wie oft ich das getan habe, aber trotzdem vom Rest des Codes verunsichert werden – AGE

+0

keine Sorgen, kann passieren, die besten Programmierer! –

+0

Einverstanden! Ich sollte einfach so spät aufhören zu programmieren, eine gute Nacht Schlaf ist manchmal die beste Lösung, danke wieder Kumpel! – AGE