尝试将图像和用户数据上传到 mongoDB 时出现错误 "Cant set headers after they are sent"
Getting error "Cant set headers after they are sent" when trying to upload image and user data to mongoDB
我正在使用 Node、Express、Mongo 和 Angular 制作简单的应用程序。我有一个表单,用户可以在其中插入数据和上传图像。对于图片上传,我使用 ng-file-upload. I am using multiparty 来获取表单数据。这是我的 API 用于将图像上传到服务器文件夹并在 mongdb 中保存和输入用户数据以及文件名。
router.route('/upload/image')
.post(function(req, res){
var form = new multiparty.Form();
form.parse(req, function(err, fields, files) {
console.log(files);
console.log(fields);
var file = files.file[0];
var contentType = file.headers['content-type'];
var tmpPath = file.path;
var extIndex = tmpPath.lastIndexOf('.');
var extension = (extIndex < 0) ? '' : tmpPath.substr(extIndex);
// uuid is for generating unique filenames.
var fileName = uuid.v4() + extension;
var destPath = './public/img/' + fileName;
// Server side file type checker.
if (contentType !== 'image/png' && contentType !== 'image/jpeg' && contentType !== 'image/jpg') {
fs.unlink(tmpPath);
return res.status(400).send('Unsupported file type.');
}
fs.rename(tmpPath, destPath, function(err) {
if (err) {
return res.status(400).send('Image is not saved:');
}
return res.json(destPath);
});
var user = new User();
user.firstName = fields.firstName;
user.lastName = fields.lastName;
user.email = fields.email;
user.numOfCups = fields.numOfCups;
user.currentBalance = fields.currentBalance;
user.totalNumOfCups = fields.numOfCups;
user.totalMoneySpent = fields.currentBalance;
user.photo = destPath;
user.save(function(err, user){
if(err){
return res.send(500, err);
}
return res.json(user);
});
});
});
当我将用户数据保存在 UI 中时,它会将文件复制到服务器文件夹中,但不会将数据保存到 mongodb 并抛出错误 - "Cant set headers after they are sent"。我知道它与 res.json
被调用两次有关,但我该如何解决这个问题?非常感谢任何指点。
您不能发送多个回复。
修复:
删除 return res.json(destPath);
并将您从创建用户到保存实体的所有代码放在 return res.json(destPath);
的位置
我正在使用 Node、Express、Mongo 和 Angular 制作简单的应用程序。我有一个表单,用户可以在其中插入数据和上传图像。对于图片上传,我使用 ng-file-upload. I am using multiparty 来获取表单数据。这是我的 API 用于将图像上传到服务器文件夹并在 mongdb 中保存和输入用户数据以及文件名。
router.route('/upload/image')
.post(function(req, res){
var form = new multiparty.Form();
form.parse(req, function(err, fields, files) {
console.log(files);
console.log(fields);
var file = files.file[0];
var contentType = file.headers['content-type'];
var tmpPath = file.path;
var extIndex = tmpPath.lastIndexOf('.');
var extension = (extIndex < 0) ? '' : tmpPath.substr(extIndex);
// uuid is for generating unique filenames.
var fileName = uuid.v4() + extension;
var destPath = './public/img/' + fileName;
// Server side file type checker.
if (contentType !== 'image/png' && contentType !== 'image/jpeg' && contentType !== 'image/jpg') {
fs.unlink(tmpPath);
return res.status(400).send('Unsupported file type.');
}
fs.rename(tmpPath, destPath, function(err) {
if (err) {
return res.status(400).send('Image is not saved:');
}
return res.json(destPath);
});
var user = new User();
user.firstName = fields.firstName;
user.lastName = fields.lastName;
user.email = fields.email;
user.numOfCups = fields.numOfCups;
user.currentBalance = fields.currentBalance;
user.totalNumOfCups = fields.numOfCups;
user.totalMoneySpent = fields.currentBalance;
user.photo = destPath;
user.save(function(err, user){
if(err){
return res.send(500, err);
}
return res.json(user);
});
});
});
当我将用户数据保存在 UI 中时,它会将文件复制到服务器文件夹中,但不会将数据保存到 mongodb 并抛出错误 - "Cant set headers after they are sent"。我知道它与 res.json
被调用两次有关,但我该如何解决这个问题?非常感谢任何指点。
您不能发送多个回复。
修复:
删除 return res.json(destPath);
并将您从创建用户到保存实体的所有代码放在 return res.json(destPath);