Question about post calls with postman, mongoose and populate

0

I am new to this and I do not know how to add an objectId from one collection to another, I saw that it is doing this in my case:

{type: mongoose.Schema.Types.ObjectId, ref: 'Weapon'}

But it does not work for me, first I want to create a weapon and then a character and then add an available weapon (with its objectId) to a character created with a post call, everything is fine but I can not add a weapon to a character anymore which are in separate collections. Only conssigo through the req.body manually add the name of the weapon but I'm interested in stopping the id, I mean to access the collection of weapons and add an available. Any ideas?

//INDEX.JS
'use strict'

var mongoose = require('mongoose');
var app      = require('./app.js');
var port = 3977;

//CONNECT TO MONGODB
mongoose.connect('mongodb://localhost:27017/API', (err, res)=>{
    if (err) {
        throw err;
    } else{
        console.log("base de datos lanzada con exito");
        app.listen(port, function(){
            console.log("servidor del api rest corriendo en puerto: " + port);
        });   
    }
});






//APP.JS
'use strict'

var express = require('express');
var bodyparser = require('body-parser');
var app = express();

var routes_user    = require('./routes/user');
var routes_weapon    = require('./routes/weapon');

app.use(bodyparser.urlencoded({extended:false}));
app.use(bodyparser.json());

// rutas base
app.use('/api', [routes_user, routes_weapon]);

module.exports = app;





//USER CONTROLLER
var User = require("../models/User");
var Weapon = require('../models/Weapon');

function createUser(req, res){
    number = Number(req.params.number);
    nombre = req.body.nombre;
    edad = req.body.edad;
    raza = req.body.raza;
    puntosVida = req.body.puntosVida;
    arma = req.body.arma;
    ataque = req.body.ataque;  
    
    
    for (let i = 0;i < number; i++){
        
        var user = new User({
            nombre:nombre,
            edad:edad,
            raza:raza,
            puntosVida: puntosVida,
            arma:arma,
            ataque:ataque,
        });
        
        
        user.save(function(err, user) {
            if(err){
                res.status(500).send({"message":err.message}); 
            } 
        });
        res.status(200).send(user);
    }
}


module.exports = {
    createUser,
};




//WEAPON CONTROLLER
var Weapon = require("../models/Weapon");

function createWeapon(req, res){
    tipo = req.params.tipo;
    nombre = tipo;
    
    switch (tipo) {
        case 'pistola': ataque = 4; probabAlcance = 6; resistencia = 3; daño = 4;
        break;
        case 'bazooka': ataque = 9; probabAlcance = 4; resistencia = 5; daño = 9;
        break;
        case 'cuchillo': ataque = 3; probabAlcance = 1; resistencia = 7; daño = 2;
        break;
        case 'escopeta': ataque = 4; probabAlcance = 4; resistencia = 2; daño = 6;
        break;
        default:  res.status(500).send({"message":"Elige pistola, bazooka, cuchillo o esopeta"}); 
        break;
    }
    

    let weapon = new Weapon({
        nombre:nombre,
        ataque:ataque,
        probabAlcance:probabAlcance,
        resistencia:resistencia,
        daño: daño,
    });       
 
    weapon.save(function(err, weapon) {
        if(err){
            res.status(500).send({"message":err.message}); 
        } 
    });
    res.status(200).send(weapon);
        
}


module.exports = {
    createWeapon, 
};




//USER MODEL
'use strict'

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var UserSchema = Schema({
    nombre: String,
    edad:Number,
    raza:String,
    puntosVida: Number,
    arma:{type: mongoose.Schema.Types.ObjectId, ref: 'Weapon'}, // NO FUNCIONA ???
    ataque:Number,
});

var User = mongoose.model('User', UserSchema);

module.exports = User;




//WEAPON MODEL
var mongoose = require('mongoose');

var Schema = mongoose.Schema;
var weaponSchema = new Schema({
    nombre: String,
    ataque: Number,
    probabAlcance: Number,
    resistencia: Number,
    daño: Number,
});

var Weapon = mongoose.model('Weapon', weaponSchema);

module.exports = Weapon;



//USER ROUTE

'use stricts'

var express = require('express'); 
var UserController = require('../controller/user');

var api = express.Router();

api.post('/create-user/:number', UserController.createUser);


module.exports = api;




//WEAPON ROUTE
'use stricts'

var express = require('express');
var WeaponController = require('../controller/weapon');

var api = express.Router();


api.post('/weapon/:tipo', WeaponController.createWeapon);


module.exports = api;
    
asked by francisco dwq 17.04.2018 в 21:00
source

0 answers