2017-12-26 1 views
0

Ich habe einen Code erstellt, um einen Server mit node.js, express.js und mongodb zu erstellen. Es ist ein einfacher Code, um Benutzerdaten zu mongodb zu speichern. Ich habe diesen Code mit Advanced REST Client getestet.Wie behebe ich das Problem, um Daten in mongodb in node.js zu speichern?

In diesem Moment werden die Anforderungsparameter übertragen, haben jedoch einen Fehler von 0, wenn die Anforderung mit dieser URL gesendet wird: http://localhost:8080/users.

server.js

var express  = require('express'); 
var app   = express(); 
var port  = process.env.PORT || 8080; 
var morgan  = require('morgan'); 
var mongoose = require('mongoose'); 
var User  = require('./user'); 
var bodyParser = require('body-parser'); 

app.use(bodyParser.json()); // for parsing application/json 
app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded 
app.use(morgan('dev')); 

mongoose.createConnection('mongodb://localhost:27017/mean', function(err) { 
    if (err) { 
     console.log('Not connected to the database: ' + err); 
    } else { 
     console.log('Successfully connected to MongoDB') 
    } 
}); 

// http://localhost:8080/users 
app.post('/users', function(req, res) { 
    var user = new User(); 
    user.username = req.body.username; 
    user.password = req.body.password; 
    user.email = req.body.email; 
    if (req.body.username == null || req.body.username == "" || req.body.password == null || req.body.password == "" || req.body.email == null || req.body.email == "") { 
     res.send("Ensure username, email and password were provided"); 
    } else { 
     user.save(function(err) { 
      if (err) { 
       res.send("Username or Email already exists."); 
      } else { 
       res.send("user created"); 
      } 
     }); 
    } 
}); 

app.listen(port, function() { 
    console.log('Running the server on port ' + port); 
}); 

user.js

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 
var bcrypt = require('bcrypt-nodejs'); 

var UserSchema = new Schema({ 
    username: { type: String, lowercase: true, required: true, unique: true }, 
    password: { type: String, required: true }, 
    email: { type: String, required: true, lowercase: true, unique: true } 
}); 

UserSchema.pre('save', function(next) { 

    var user = this; 
    bcrypt.hash(user.password, null, null, function(err, hash) { 
     if (err) return next(err); 
     user.password = hash; 
     next(); 
    }); 
}); 

module.exports = mongoose.model('User', UserSchema); 

package.json

{ 
    "name": "mean", 
    "version": "1.0.0", 
    "description": "", 
    "main": "server.js", 
    "scripts": { 
    "test": "echo \"Error: no test specified\" && exit 1" 
    }, 
    "author": "", 
    "license": "ISC", 
    "dependencies": { 
    "bcrypt-nodejs": "0.0.3", 
    "body-parser": "^2.18.2", 
    "express": "^4.16.2", 
    "mongoose": "^4.13.7", 
    "morgan": "^1.9.0" 
    } 
} 
+0

Bitte lesen Sie [Unter welchen Umständen kann ich hinzufügen „ dringende "oder andere ähnliche Sätze zu meiner Frage, um schnellere Antworten zu erhalten?] (// meta.stackoverflow.com/q/326569) - die Zusammenfassung ist, dass dies ist kein idealer Weg, um Freiwillige anzusprechen, und ist wahrscheinlich kontraproduktiv, um Antworten zu erhalten. Bitte unterlassen Sie das Hinzufügen zu Ihren Fragen. – halfer

Antwort

0

Sie sollten anstelle einer get Anfrage mit Ihrem Browser eine post Anfrage tun.

Auch

var user = new User(); 
    user.username = req.body.username; 
    user.password = req.body.password; 
    user.email = req.body.email; 
    if (req.body.username == null || req.body.username == "" || req.body.password == null || req.body.password == "" || req.body.email == null || req.body.email == "") { 
     res.send("Ensure username, email and password were provided"); 

Sie senden keine Parameter wie email oder name, ... in Ihrer Anfrage. So kann nichts in Ihrer Datenbank gespeichert werden.

Do post Anfrage statt get und erwägen, die richtigen Parameter in Ihre Anfrage hinzuzufügen und alles wird gut.

+0

Danke für Ihre Antwort. Aber ich habe Post-Methode im Advanced REST Client verwendet. Sie können mit dieser URL testen: http: // localhost: 8080/Benutzer –

+0

@OleksandrLesnevskyi, wenn Sie eine 'post' verwenden, senden Sie die Parameter' username', 'password' und' email' in Ihrer Anfrage? – edkeveked

+0

Sicher. Ich sende die Parameter im JSON-Format so. {"Benutzername": "Erstellung", "Passwort": "qwer", "E-Mail": "[email protected]" –

0

In server.js diesen Code verwenden, um MongoDB zu verbinden

mongoose.connect('mongodb://localhost:27017/mean', function(err) { 
    if (err) { 
     console.log('Not connected to the database: ' + err); 
    } else { 
     console.log('Successfully connected to MongoDB') 
    } 
}); 

Mongo DB speichert Objekt:

enter image description here

enter image description here

+0

Danke für Ihre Antwort. Ihre Antwort war sehr hilfreich. –

Verwandte Themen