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;