英文:
Send object and additional attributes to express server via Axios and save with Mongoose
问题
你想要将用户对象和一个简单的字符串通过axios post发送到后端,然后使用mongoose将这些数据存储在MongoDB中。如果我只发送用户对象而不发送浏览器字符串,也就是说只在后端处理用户对象,一切都正常运行。该对象具有所有属性,除了浏览器属性。我稍后添加了这个属性。那么我如何才能一对一地保存用户对象,并保存其他属性,比如这里的浏览器属性?实际上只保存了浏览器字符串。
在保存新用户的mongoose函数中:
export const newUser = async (req, res, next) => {
try {
const user = new User({ ...req.body.userD, browser: req.body.browser });
const savedUser = await user.save();
const myPromise = new Promise((resolve, reject) => {
resolve(savedUser);
});
myPromise.then(() => {
res.status(200).json("用户已保存");
});
} catch (error) {
next(err);
}
};
axios post:
let config = {
method: 'post',
maxBodyLength: Infinity,
url: 'http://localhost:3999/server/user/new',
headers: {
'Content-Type': 'application/json'
},
userD: data,
browser: browser
};
await axios.request(config)
.then((result) => {
res.end(result.data)
})
用户模型:
import mongoose from "mongoose";
const UserSchema = new mongoose.Schema(
{
// 属性列表...
browser: {
type: String,
},
},
{ timestamps: true }
);
export default mongoose.model("User", UserSchema);
如果你发送的数据如下:
{
"data":{
"ip":"2003:c4:f720.xxx",
"network":"2003:xxx",
"version":"IPv6",
"city":"xxxx",
"region":"xxxx",
"region_code":"BW",
"country":"DE",
"country_name":"Germany",
"country_code":"DE",
"country_code_iso3":"DEU",
"country_capital":"Berlin",
"country_tld":".de",
"continent_code":"EU",
"in_eu":true,
"postal":"xxxx",
"latitude":xxxx,
"longitude":x.xx,
"timezone":"Europe/Berlin",
"utc_offset":"+0200",
"country_calling_code":"+49",
"currency":"EUR",
"currency_name":"Euro",
"languages":"de",
"country_area":357021,
"country_population":82927922,
"asn":"AS3320",
"org":"Deutsche Telekom AG"
},
"browser":"Browser"
}
在MongoDB中将会保存包含所有属性的用户对象,包括浏览器属性。
英文:
I'm posting a user object and a simple string to the backend via axios post and then want to store this data in MongoDB using mongoose. If I send the whole thing without the browser string, i.e. only the user object and process it in the backend, everything works. The object has all attributes except for the browser attribute. I added this later. So how can I save the user object 1:1 and also save other attributes, such as the browser attribute here? All that is actually saved is just the browser string
Function for save new User with mongoose:
//CREATE NEW USER
export const newUser = async (req, res, next) => {
try {
const user = new User({ ...req.body.userD, browser: req.body.browser });
const savedUser = await user.save();
const myPromise = new Promise((resolve, reject) => {
resolve(savedUser);
});
myPromise.then(() => {
res.status(200).json("User saved");
});
} catch (error) {
next(err);
}
};
axios post :
let config = {
method: 'post',
maxBodyLength: Infinity,
url: 'http://localhost:3999/server/user/new',
headers: {
'Content-Type': 'application/json'
},
userD: data,
browser:browser
};
await axios.request(config)
.then((result) => {
res.end(result.data)
})
User Model:
import mongoose from "mongoose";
const UserSchema = new mongoose.Schema(
{
asn: {
type: String,
},
city: {
type: String,
},
continent_code: {
type: String,
},
country: {
type: String,
},
country_area: {
type: Number,
},
country_calling_code: {
type: String,
},
country_capital: {
type: String,
},
country_code: {
type: String,
},
country_code_iso3: {
type: String,
},
country_name: {
type: String,
},
country_population: {
type: Number,
},
country_tld: {
type: String,
},
currency: {
type: String,
},
currency_name: {
type: String,
},
in_eu: {
type: Boolean,
},
ip: {
type: String,
},
languages: {
type: String,
},
latitude: {
type: Number,
},
longitude: {
type: Number,
},
network: {
type: String,
},
org: {
type: String,
},
postal: {
type: Number,
},
region: {
type: String,
},
region_code: {
type: String,
},
timezone: {
type: String,
},
utc_offset: {
type: String,
},
version: {
type: String,
},
browser: {
type: String,
},
},
{ timestamps: true }
);
export default mongoose.model("User", UserSchema);
UPDATE
This is the data which is send to the express server:
> {
"data":{
"ip":"2003:c4:f720.xxx",
"network":"2003:xxx",
"version":"IPv6",
"city":"xxxx",
"region":"xxxx",
"region_code":"BW",
"country":"DE",
"country_name":"Germany",
"country_code":"DE",
"country_code_iso3":"DEU",
"country_capital":"Berlin",
"country_tld":".de",
"continent_code":"EU",
"in_eu":true,
"postal":"xxxx",
"latitude":xxxx,
"longitude":x.xx,
"timezone":"Europe/Berlin",
"utc_offset":"+0200",
"country_calling_code":"+49",
"currency":"EUR",
"currency_name":"Euro",
"languages":"de",
"country_area":357021,
"country_population":82927922,
"asn":"AS3320",
"org":"Deutsche Telekom AG"
},
"browser":"Browser"
}
答案1
得分: 0
从你的编辑部分我看到你需要访问“data”字段然后展开…
const user = new User({…req.body.userD.data, browser:req.body.browser})
英文:
From your edit part I see that you need to access the ‘data’ field and than spread…
const user = new User({…req.body.userD.data, browser:req.body.browser})
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论