我正在嘗試使用以下發布請求將用戶保存到 mongodb 資料庫,但出現錯誤:
“錯誤:用戶驗證失敗:郵件:需要路徑‘郵件’。,偽:需要路徑‘偽’。,密碼: 路徑 `password` 是必需的。"
PS:我為回復 Eol 進行了編輯,但我的問題 / 和錯誤仍然存??在。
詳細錯誤:
errors: {
mail: ValidatorError: Path `mail` is required.
[...] {
properties: [Object],
kind: 'required',
path: 'mail',
value: undefined,
reason: undefined,
[Symbol(mongoose:validatorError)]: true
},
我的控制器:
exports.signup = (req, res, next) => {
const user = new User({
mail: req.body.mail,
password: req.body.password,
pseudo: req.body.pseudo,
});
user
.save()
.then(() => res.statuts(201).json({ message: "User created !" }))
.catch(err => console.log(err) )
}
我的用戶模型:
const mongoose = require("mongoose");
const uniqueValidator = require("mongoose-unique-validator");
const userSchema = mongoose.Schema({
pseudo: { type: String, required: true, unique: true },
mail: { type: String, required: true, unique: true },
password: { type: String, required: true },
});
userSchema.plugin(uniqueValidator);
module.exports = mongoose.model("User", userSchema);
我的前面:
const handleSubmit = (e) => {
e.preventDefault()
const pseudo = e.target[0].value,
password = e.target[1].value,
mail = e.target[2].value
const data = new FormData()
data.set("pseudo", pseudo)
data.set("password", password)
data.set("mail", mail)
axios.post(url, data)
.then(res => console.log(res))
.catch(res => console.log(res))
};
return (
<div>
<form onSubmit={handleSubmit}>
<div >
<label htmlFor="pseudo">Pseudo</label>
<input name="pseudo" type="text" id="pseudo"/>
</div>
<div>
<label htmlFor="password">password</label>
<input name="password" type="password" id="password" autoComplete="true"/>
</div>
<div>
<label htmlFor="mail">email</label>
<input name="mail" type="email" id="mail"/>
</div>
<input
type="submit"
to="/user"
value="Sign up"
/>
</form>
</div>
);
}
uj5u.com熱心網友回復:
您傳遞給 mongoose 的物件不包含名為的欄位,mail而是將其傳遞為email. 因此,您需要將email請求負載中的欄位映射到mail:
const user = new User({
mail: req.body.email,
password: req.body.password,
pseudo: req.body.pseudo,
});
您需要修復的另一件事是您的客戶端。您正在發送表單資料而不是 json-body。將其更改為:
const data = { pseudo: e.target[0].value,
password: e.target[1].value,
mail: e.target[2].value };
axios.post(url, data) // rest of your code
uj5u.com熱心網友回復:
確保您從req.body. 在我看來,可能就是這樣。嘗試req.body在您的注冊控制器中記錄 的值。較新版本的 Expressjs 不再使用 bodyParser 中間件,而是使用app.use(express.urlencoded())and app.use(express.json())。還不能對您的帖子發表評論,所以這就是為什么這個答案可能是一個建議。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/494151.html
