javascript - 从一个函数调用变量 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中。
我尝试过的事情:
我试图将router.post("/registerCar", (req, res)添加到router.post("/register", (req, res)但每当我尝试提交汽车登记表时,它都会显示“方法POST registerCar 找不到”或类似的东西
将newUser设为全局变量,但由于某种原因,我无法在router.post("/registerCar", (req, res)中调用它
在router.post("/register", (req, res)函数中尝试了回调参数,但这并没有真正起作用(尽管我可能做错了)
我尝试添加_id: Schema.Types.ObjectId; 进入 User.js 和 Car.js,但它给了我一个错误“错误 [MongooseError]:在保存新的 MongooseError 之前,文档必须有一个 _id”。我尝试为此研究解决方案,但没有任何结果。
我知道这很多,但我正在努力扩展我的编码技能,我已经被困在这两天了。如果你们能帮助我,我将不胜感激。
___________________________________________________________________________________________________
// 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;
___________________________________________________________________________________________________
解决方案
推荐阅读
- android - Android 启动带有确切地址的逐向导航意图
- python - 将行插入 MySQL 表时出现 pymysql.err.ProgrammingError 错误(使用 Python、Flask、ClearDB)
- algorithm - 如何找到堆的第k个元素
- elasticsearch - Elasticsearch - 优化聚合而不计算?
- r - 是否有一个 R 包可以使用 lme() 模型运行多重插补?
- javascript - Javascript:根据一定的高度和宽度创建空白图像并获取base64
- excel - ExcelDataReader 更改列名
- python - TypeError:无法解压不可迭代的 Race 对象
- c# - 如何在wfa C#中设置显示工具提示的位置
- html - 忽略样式属性的内容安全策略随机数