colin_dev256
colin_dev256

Reputation: 815

express mongoose Mongodb not inserting properly

I have the following schemas. When I try to register a new user, mongodb replaces the last registered user's name with the new one's. ObjectId stays the same for that entry. Have no idea why it's doing that. No errors.

I console.loged everywhere in the post api and everything is fine. The entry is seen in the database but has replaced the latter. Could the issue be my schema design? Something tells me it's the way I'm making everything String in the schema definitions. I'm building with MEAN.

var AnswerSchema = Schema({
    response    : { type: String, default:null},
    question    : { type: String, ref: 'Question'},
    employee    : { type: String, ref: 'User'}
})

var QuestionSchema = Schema({
    title : String,
});

var UserSchema = Schema({
    username : String,
});

module.exports = mongoose.model('Answer', AnswerSchema);
module.exports = mongoose.model('Question', QuestionSchema);
module.exports = mongoose.model('User', UserSchema);

api

var Question = require('../models/questions'); 
var User = require('../models/users'); 
var Answer = require('../models/answers');
var jwt = require('jsonwebtoken');
var secret = "markov";
var user = new User(); 
var question = new Question();
var answer = new Answer();

// Export routes to the main server.js file
module.exports = function(router) {
    /* ====================
    User Registration Route
    ==================== */
    router.post('/users', function(req, res) {
        user.username = req.body.username;

        if (req.body.username == null) {
            res.json({ success: false, message: 'Ensure username is provided' });
        } else {
            // If criteria is met, save user to database
            user.save(function(err) {
                console.log(user.username);
                if (err) {
                    res.json({ success: false, message: 'Username already exists!' });
                } else {
                    res.json({ success: true, message: 'user created!' }); // If all criteria met, save user
                } 
            });
        }
    });

Upvotes: 0

Views: 66

Answers (1)

Mμ.
Mμ.

Reputation: 8542

I don't think that is the right way to create and save new users. You create new user by instantiating User model and passing an object to it as parameters. To see what I mean, refer to my solution below.

var Question = require('../models/questions'); 
var User = require('../models/users'); 
var Answer = require('../models/answers');
var jwt = require('jsonwebtoken');
var secret = "markov";
// you don't define new User model here!
// var user = new User(); 
var question = new Question();
var answer = new Answer();

// Export routes to the main server.js file
module.exports = function(router) {
    /* ====================
    User Registration Route
    ==================== */
    router.post('/users', function(req, res) {

        if (req.body.username == null) {
            res.json({ success: false, message: 'Ensure username is provided' });
        } else {
            // If criteria is met, save user to database
            // create new user 
            var newUser = new User({ username: req.body.username });
            newUser.save(function(err) {
                console.log(user.username);
                if (err) {
                    res.json({ success: false, message: 'Username already exists!' });
                } else {
                    res.json({ success: true, message: 'user created!' }); // If all criteria met, save user
                } 
            });
        }
    });

Upvotes: 1

Related Questions