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;
}
Dank! Ich kann dir nicht sagen, wie oft ich das getan habe, aber trotzdem vom Rest des Codes verunsichert werden – AGE
keine Sorgen, kann passieren, die besten Programmierer! –
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