Javascript 无法使用Angular将formdata发送到节点服务器
在应用验证后,我尝试在angular中创建一个注册页面,并将其发送到服务器并保存到mongodb中 我试过这样做Javascript 无法使用Angular将formdata发送到节点服务器,javascript,angular,typescript,express,multipartform-data,Javascript,Angular,Typescript,Express,Multipartform Data,在应用验证后,我尝试在angular中创建一个注册页面,并将其发送到服务器并保存到mongodb中 我试过这样做 register_user() { const data = this.register_form.getRawValue(); const formData: FormData = new FormData(); formData.append('name', data.name); formData.append('email', data
register_user() {
const data = this.register_form.getRawValue();
const formData: FormData = new FormData();
formData.append('name', data.name);
formData.append('email', data.email);
formData.append('password', data.password);
// formData.append('image', this.image);
formData.append('gender', 'Male');
formData.forEach((value, key) => {
console.log(value);
});
this.user_service.create_user(formData).subscribe((res) => {
console.log(res);
});
}
服务
create_user(data: FormData) {
return this.http.post(`${environment.BASE_URL}/user/create-user`, data, {
headers: { 'Content-Type': 'multipart/form-data' },
});
}
节点服务器
// required Route
const User = require('./Routes/user');
// Using middle ware
app.use(cors());
app.use(
express.urlencoded({
extended: true,
})
);
app.use(express.json());
app.use('/user', User);
app.listen(PORT, () => console.log(`App started on http://localhost:${PORT}`));
在请求主体中的服务器上,我得到的是空对象{}
但我尝试发送普通Js对象,它工作正常。
我怎样才能解决这个问题?formdata是否需要在app.module.ts中安装或导入任何其他模块?您应该使用。这是接收发送到后端的FormData数据最方便的方法
const multiparty = require('multiparty');
router.post('/create-user', async (req, res) => {
const form = new multiparty.Form();
// catch formData event
form.parse(req, (err, fields, files) => {
let {name, email, gender, mobile_no, password} = fields;
try {
if (
!(name && email && gender && mobile_no && password && password.length > 8)
) {
throw new Error(
`All fields are required name: ${name} , email: ${email} , gender: ${gender} , MobileNo: ${mobile_no} .Password length must be greater then 8 character`
);
}
password = bcrypt.hashSync(password, parseInt(process.env.BCRYPT_SALT));
// let response = await USER.create({ name, email, gender, mobile_no });
const token = await jwt.sign(
{name, email, mobile_no, user_id: response._id},
process.env.JWT_KEY
);
response = response.toObject();
response['token'] = token;
res.status(200).json({err: 0, message: 'User Created', response});
} catch (error) {
res.status(404).json({err: 1, message: error.message, error});
}
});
});
const multiparty = require('multiparty');
router.post('/create-user', async (req, res) => {
const form = new multiparty.Form();
// catch formData event
form.parse(req, (err, fields, files) => {
let {name, email, gender, mobile_no, password} = fields;
try {
if (
!(name && email && gender && mobile_no && password && password.length > 8)
) {
throw new Error(
`All fields are required name: ${name} , email: ${email} , gender: ${gender} , MobileNo: ${mobile_no} .Password length must be greater then 8 character`
);
}
password = bcrypt.hashSync(password, parseInt(process.env.BCRYPT_SALT));
// let response = await USER.create({ name, email, gender, mobile_no });
const token = await jwt.sign(
{name, email, mobile_no, user_id: response._id},
process.env.JWT_KEY
);
response = response.toObject();
response['token'] = token;
res.status(200).json({err: 0, message: 'User Created', response});
} catch (error) {
res.status(404).json({err: 1, message: error.message, error});
}
});
});