【问题标题】:POST and GET images to/out of MongoDB in Angular在 Angular 中向/从 MongoDB POST 和 GET 图像
【发布时间】:2015-04-29 02:25:57
【问题描述】:

我正在制作一个 Angular 应用程序,它为用户提供了管理项目的可能性。我有 nodeJS & express 服务端和 MongoDB 作为我的数据库。

我想实现,用户可以将媒体(16MB 以下的图像,因此无需使用 GridFS)上传到他们的项目,并且您可以显示哪个项目,附加了哪些媒体。

我没有得到图像,也没有错误。如何将 project_Id 从 angular 传递到我的路线,以找到附加到项目的媒体?这种尝试发布和获取媒体的方式是否正确?

项目和媒体模型:

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 定义一个 var,这导致了错误。 设法使 GET 请求工作,我的应用程序正在数据库中查找条目。但是我什么都看不到..

【问题讨论】:

  • 在 express app.get('/uploads/media/:projectId'... 中阅读参数化路由
  • 这是一个绝妙的主意。但是现在当我试图在我的控制器中实现并编写一个新的 $http 请求时,我所有的范围看起来都像这样 {{ somescope.parameter }} ...为什么会这样?似乎我无法触发第二个 http.request。
  • 您的观点与请求有什么关系?为什么你不能提出第二个要求?您是否查找过错误?
  • 为你更新了我最初的帖子
  • 在chrome中监听网络请求并粘贴得到的内容

标签: angularjs node.js mongodb multer


【解决方案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);
});

这将返回所有文档。

【讨论】:

  • 将我现在工作的.find 更新为我的初始帖子。现在我从app.get('uploads/media/:projectId'...) 获得了 304 状态。该请求现在似乎有效,但我无法获取图像
  • 你检查过数据库以确保那里有一个对象吗?试试github.com/iwind/rockmongo
  • 一直在使用 Postman for chrome,因为我只需要读取 json 数据。我现在正在安装rockmongo
  • 我一整天都在尝试安装rockmongo,但失败了。有没有其他方法可以找出数据库中是否有任何图像?尝试获取数据时,我在控制台中得到了这个:GET /uploads/media/[object%20Object] 304
  • 我使用 mongohub。这是一个很棒的 GUI 列表docs.mongodb.org/ecosystem/tools/administration-interfaces
猜你喜欢
  • 2018-12-05
  • 2021-11-24
  • 1970-01-01
  • 2019-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-02
  • 1970-01-01
相关资源
最近更新 更多