node.js - MongoDB:将数据正确保存到模型
问题描述
目标:用户模型需要为用户提供相关的工作数据。我需要能够使用 EJS 访问用户的作业数据,如下所示:<%= user.jobs[0] %>
当前用户模型:
var UserSchema = new mongoose.Schema({
username: String,
password: String,
jobs :[{
name: String,
score: String
}]
});
用户名和密码工作正常。但是我需要让工作数据正常工作。作业数据是一个前端 javascript 数组,其中包含 200 个特定于用户的排名作业。
我可以像这样访问这个变量中的数据:
$( "#testButton").click(function() {
fetch('/test', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify(jobs)
}).then((response) => {
console.log(response)
}).catch((err) => {
console.log(err);
})
这给了我看起来像这样的数据......
[{
name: 'Administrative assistant',
score: -48 },
{
name: 'Adult literacy instructor',
score: 28 },
{
name: 'Advertising copywriter',
score: 45
}]
我的问题是......我如何获取这些数据......并将其正确放入用户模型?注意:我正在使用 body-parser。
我的 POST 路线示例...
router.post("/register", function(req, res){
var newUser = new User({username: req.body.username});
User.register(newUser, req.body.password, function(err, user){
if(err){
.... etc.
解决方案
模型/User.js
const mongoose = require("mongoose");
const schema = new mongoose.Schema({
username: String,
password: String,
jobs: [
{
name: String,
score: String,
},
],
});
module.exports = mongoose.model("user", schema);
index.js
const app = require("express")();
const bodyParser = require("body-parser");
const mongoose = require("mongoose");
const User = require("./models/User");
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.post("/users", async (req, res) => {
const user = await User.create({
username: req.body.username,
password: req.body.password,
jobs: req.body.jobs,
});
return res.status(201).json({
message: "Created",
data: user,
});
});
mongoose.connect("mongodb://root:toor@0.0.0.0:27017/stackoverflow");
mongoose.connection.on("error", err => console.error(err));
app.listen(3000, () => console.log("Listening on :3000"));
向以下数据发出post
请求/users
:
{
"username": "jon",
"password": "snow",
"jobs": [
{
"name": "software dev", "score": "10 pts"
},
{
"name": "frontend dev", "score": "8 pts"
}
]
}
将返回:
{
"message": "Created",
"data": {
"_id": "5d86ec91023b9785f2b455bb",
"username": "jon",
"password": "snow",
"jobs": [
{
"_id": "5d86ec91023b9785f2b455bd",
"name": "software dev",
"score": "10 pts"
},
{
"_id": "5d86ec91023b9785f2b455bc",
"name": "frontend dev",
"score": "8 pts"
}
],
"__v": 0
}
}
推荐阅读
- php - 如何在一个部分中将测试发送给所有学生
- dart - Flutter BloC 模式:基于另一个 BloC 的流更新 BloC 流
- jsf - 每次我从另一个页面调用请求时,如何阻止授权 WebFilter 将我重定向到主页
- android - Android 应用程序如何适应所有不同的 API?
- emacs - emacs org-babel 结果意外输出
- c# - 读取和写入同一个 csv 文件
- python - 如何生成具有不同图像的按钮
- python - Python TextBox 在没有换行符的情况下追加文本
- ruby-on-rails - 指示当前登录的用户
- data-warehouse - “数据集市”是“星型模式”的同义词吗?