首页 > 解决方案 > 从一个函数调用变量 ID 到另一个函数 (nodejs) (mongoose)

问题描述

我是编码和 nodejs 的新手,我相信这个问题可能只是我缺乏 nodejs/编码经验。代码发布在下面,有关更多信息,我发布了 Github 文件

我正在尝试将对象 id 从一个函数调用到另一个函数,以便我可以关联父函数和子函数。

具体来说(在文件users.js中)我试图从函数router.post("/register", (req, res)调用newUser变量到函数router.post("/registerCar", (req, res )但是每当我尝试在registerCar函数中调用newUser变量时,它似乎是空的。即使我调用User._id,它也似乎是空的。

我试图弄清楚如何将 newUser 的对象 id调用newCar中。

我尝试过的事情:

我知道这很多,但我正在努力扩展我的编码技能,我已经被困在这两天了。如果你们能帮助我,我将不胜感激。

___________________________________________________________________________________________________

// User.js
const mongoose = require('mongoose');
const Schema = mongoose.Schema;


const UserSchema =  new mongoose.Schema({
   name: {
    type: String,
    required: true,
  },
  email: {
    type: String,
    required: true,
  },
  password: {
    type: String,
    required: true,
  },
  date: {
    type: Date,
    default: Date.now,
  },
  carType: [{ 
    type: Schema.Types.ObjectId, 
    ref: 'Car' 
  }]
});

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

___________________________________________________________________________________________________

//Car.js

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
 const UserModel =  new mongoose.Schema({
    carMake: {
    type: String,
    require: true,
  },
  carModel: {
    type: String,
    require: true,
  },
  carid: [{
    type: Schema.Types.ObjectId, 
    ref: 'User'
  }]
});

const Car = mongoose.model('Car', UserModel);
module.exports = Car;

___________________________________________________________________________________________________

//users.js
const express = require("express");
const router = express.Router();
const bcrypt = require("bcryptjs");
const passport = require("passport");
const mongoose = require("mongoose");
const Schema = mongoose.Schema;

// User model
const User = require("../models/User");

//Cars model
const Car = require("../models/Car");

//Login
router.get("/login", (req, res) => res.render("login"));

//Register Page
router.get("/register", (req, res) => res.render("register"));

//test page
router.get("/test", (req, res) => res.render("test"));

//registerCar Page
router.get("/registerCar", (req, res) => res.render("registerCar"));

// Register Handle
router.post("/register", (req, res) => {
  const { name, email, password, password2 } = req.body;
  let errors = [];

  // Check required fields
  if (!name || !email || !password || !password2) {
    errors.push({ msg: "Please fill in all fields." });
  }

  // Check passwords match
  if (password != password2) {
    errors.push({ msg: "Passwords do not match." });
  }

  // Check pw length
  if (password.length < 6) {
    errors.push({ msg: "Password should be longer than 6 characters." });
  }

  // Issue present
  if (errors.length > 0) {
    res.render("register", {
      errors,
      name,
      email,
      password,
      password2,
    });
  } else {
    // Validation passed
    User.findOne({ email: email }).then((user, callback) => {
      if (user) {
        // User exists
        errors.push({ msg: "Email is already registered" });
        res.render("register", {
          errors,
          name,
          email,
          password,
          password2,
        });
      } else {
        const newUser = new User({
          name,
          email,
          password,
        });

        // Hash Password
        bcrypt.genSalt(10, (err, salt) =>
          bcrypt.hash(newUser.password, salt, (err, hash) => {
            if (err) throw err;
            //Set password to hashed
            newUser.password = hash;
            //Save user
            newUser
              .save()
              .then((user) => {
                req.flash(
                  "success_msg",
                  "You are now registered. Please log in."
                );
                res.redirect("/users/login");
              })
              .catch((err) => console.log(err));
          })
        );
      }
    });
  }
});

// Login Handle
router.post("/login", (req, res, next) => {
  passport.authenticate("local", {
    successRedirect: "/dashboard",
    failureRedirect: "/users/login",
    failureFlash: true,
  })(req, res, next);
});

//Logout Handle
router.get("/logout", (req, res) => {
  req.logout();
  req.flash("success_msg", "You are logged out");
  res.redirect("/users/login");
});

// Car registration Handle
router.post("/registerCar", (req, res) => {
  const { carMake, carModel, carid } = req.body;
  let errors = [];

  const newCar = new Car({
    carMake,
    carModel,
    carid, //want to call User ID over here  
  });

  newCar
    .save()
    .then((car) => {
      console.log(newCar._id);
      res.redirect("/dashboard");
    })
    .catch((err) => console.log(err));
});

module.exports = router;

___________________________________________________________________________________________________

github链接:https ://github.com/AamirAshraf96/carGarage

标签: javascriptnode.jsmongodbfunctionschema

解决方案


推荐阅读