【发布时间】:2017-05-03 10:30:45
【问题描述】:
我对此很陌生。任何帮助都会有帮助!!!!!!
基本上,这是一个系统,其中 Angular 运行一系列文件,然后向服务器发出上传请求。服务器的第一步是将文件添加到数据库中,然后上传文件。
Angular 正在正确发送文件 [1,2,3,4],但是当 SERVER 将数据发布到数据库时,我发现它会重复随机对象并跳过其他对象。
这真的让我很困惑。
这是我的代码:
角度:
for (var i = 0; i < files.length; i++) {
console.log('angular uploading file!')
console.log(files[i].trackNumber)
Upload.upload({
url: '/../api/createTrack',
data: {file: files[i].trackFile, trackUserName: scope.username, trackNumber: files[i].trackNumber, trackName: files[i].trackName, trackAlbum: scope.albumName, trackArtist: scope.artistEditName, trackArtistImage: scope.currentArtistData.artistImage, trackAlbumTrackLength: scope.tracks.length},
file: files[i].trackFile
})
}.then(function (res) {
console.log('Success ' + res.config.data.file.name + 'uploaded. Response: ' + res.data)
}, function (res) {
console.log('Error status: ' + res.status)
}, function (evt) {
var progressPercentage = parseInt(100.0 * evt.loaded / evt.total)
console.log('progress: ' + progressPercentage + '% ' + evt.config.data.file.name)
})
Node.js:
createTrack.prototype.uploadFile = function(req, res) {
var file = req.files.file;
addWavFile = function(trackWavSource){
read_file = fs.readFileSync(file.path)
var params = {Bucket: 'dogatracks', Key: trackWavSource, Body: read_file, ACL:"public-read"}
s3.putObject(params, function(err, data) {
if (err) {
console.log("Error uploading data: ", err)
} else {
etc
addTrackToDatabase = function(artistId, albumId, trackAlbumArt, trackWavSource){
const dateAdded = new Date()
Track
.create({
trackName:req.body.trackName,
trackNumber: req.body.trackNumber,
trackAlbum: req.body.trackAlbum,
ETC
现在,它可以正常工作了,文件有时上传得很好,但有时由于某种原因,文件在数据库中重复...例如,日志输出如下:
addtodatabase:
1
add File:
1
addtodatabase:
1
add File:
1
addtodatabase:
3
add File:
3
addtodatabase:
4
add File:
4
如您所见,系统通常可以正常工作,但由于某种原因,文件会随机重复!第一个曲目被上传了两次,并两次添加到数据库中。这不仅仅发生在第一首曲目上。此外,有时所有曲目都可以正常上传。在 Angular 日志中,文件始终以正确的顺序作为 1、2、3、4 发送。我觉得我错过了有关服务器/HTTP 实际工作方式的一些信息。
这和时间有关系吗?我不明白为什么服务器会错过请求或重复请求,因为 Angular 每次都清楚地在循环内发送正确的信息。
非常感谢任何帮助。
新线索:
每次请求服务器端代码时,代码都会为请求生成一个唯一 ID: 1a6e4ef9-48bf-4612-8562-8b38ab1b6725 在数据库中,444 个轨道对象中的每一个都具有相同的 ID!很明显,服务器并没有真正为该跟踪对象再次“触发”该函数。在函数中,无论出于何种原因,服务器都会一遍又一遍地输出对象。就像当函数收到新请求时,它不是对新信息(或其他东西)进行操作,而是再次将当前信息触发给 Mongoose?我可能只需要重新编写整个系统,尽管让这项工作更可取 - 尽管我可以看到可能有更好的方法。
【问题讨论】:
-
您没有在角码中确认上传成功(或错误)。
-
我刚刚添加了,我仍然遇到同样的问题,例如:
-
我上传了曲目 1,2,3,4,5,结果如下:1,4,4,4,5
-
在 Chrome 的控制台中得到了这个:
-
成功 1.wav 上传。响应:... 成功 4.wavuploaded。 ...成功 5.wavuploaded。响应:...(2和3没有发布,但4被添加到数据库中3次)
标签: angularjs node.js http amazon-s3