1

私は、ユーザーにプロジェクトを管理する可能性を与えるAngularアプリケーションを作成しています。データベースとして nodeJS と Express serveside と MongoDB を持っています。

ユーザーがメディア(16MB未満の画像、したがってGridFSを使用する必要はありません)をプロジェクトにアップロードできること、およびどのプロジェクトにどのメディアが添付されているかを表示できることを達成したいと考えています。

画像もエラーもありません。project_Idプロジェクトに添付されたメディアを見つけるために、角度から自分のルートに渡すにはどうすればよいですか? メディアを POST して GET しようとするこの方法は正しいですか?

プロジェクトとメディアのモデル:

var mediaSchema = mongoose.Schema({
        media       : {data: Buffer, contentType: String},
        project_id  : String,
        updated_at  : {type: Date, default: Date.now }
});

var projectSchema = mongoose.Schema({
        author      : String,
        name        : String,
        description : String,
        tags        : String,
        updated_at  : {type: Date, default: Date.now },
        active      : {type: Boolean, default: false}
});

ルーティング

var Media = require('./models/media.js'); 
//GET all the media
app.get('/uploads/', function(req, res, next){
    Media.find(function (err, media){
        if (err) return next (err);
        res.json(media);
    });
});
//GET one item
app.get('/uploads/media/:projectId', function(req, res, next){
    Media.findOne(req.params , function (err, media){
        if (err) return next (err);
        res.json(media);
    });
});

アップロードの管理

app.use(multer({ dest: './uploads/',
 rename: function (fieldname, filename) {
    return filename+Date.now();
  },
onFileUploadStart: function (file) {
  console.log(file.originalname + ' is starting ...')
},
onFileUploadComplete: function (file) {
  console.log(file.fieldname + ' uploaded to  ' + file.path)
  done=true;
}
}));    

var Media = require('./app/models/media.js'); 
//POST media to the upload directory
app.post('/uploads/', function(req, res){
   if(done==true){
    Media.create(req.body, function(err, post){            
        console.log(req.files);
        res.end('File uploaded');          
    });
   }
});

角度コントローラー

    var app = angular.module('myApp', []);

    app.controller('projectCtrl', function($scope, $http) {
        $scope.myVar = false;
        $scope.toggle = function() {
            $scope.myVar = !$scope.myVar
        };
        $http.get('/profile/project/').then(function (res){
            $scope.projects = res.data;
        });


        //GET Media
        var projectId = {{projects._id}};
        $http.get('/uploads/media' + projectId).succes(function(data){
            console.log('Medien-Daten erhalten');
            $scope.media = data;
        });
    });

ドイツからよろしく、デビッド

更新 (新しいエラー)

解決策を実装しようとすると、スコープに問題が発生します。メディアに $http.get を追加すると、他のスコープはデータをフェッチしないように見えます...次のように表示されます:スコープが機能しない

更新 2 (スコープ エラーが修正されました)

コントローラーのエラーを修正しました。projectId の変数を定義していなかったため、エラーが発生しました。GET リクエストを機能させることができ、私のアプリケーションはデータベース内のエントリを探しています。しかし、私は何とか見ることができません..

4

1 に答える 1

1

get all 関数でのの使用.findは正しくありません。

http://mongoosejs.com/docs/api.html#query_Query-findを参照してください

Media.find({}, function (err, media){
    if (err) return next (err);
    res.json(media);
});

これにより、すべてのドキュメントが返されます。

于 2015-04-28T18:21:56.257 に答える