【发布时间】:2015-09-21 10:04:07
【问题描述】:
我正在使用 Node、Express、Mongo 和 Angular 来制作简单的应用程序。我有一个表单,用户可以在其中插入数据并上传图像。对于图片上传,我使用ng-file-upload。我正在使用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 并引发错误 - “发送后无法设置标题”。我知道这与res.json 被调用两次有关,但我该如何解决呢?任何指针都非常感谢。
【问题讨论】:
-
你做了两次
res.json。它应该只做一次
标签: angularjs node.js mongodb express mean-stack