平均堆栈:如何绑定上传到mongoose模型?
我在我的MEAN应用程序(它的一个项目控制面板)中玩上传表单。 我使用这个教程来实现一个工作上传: http : //markdawson.tumblr.com/post/18359176420/asynchronous-file-uploading-using-express-and
有了这个我可以上传文件 – 他们出现在我的上传文件夹。
现在我想实现,上传链接到用户所做的项目。 例如:Jon Doe已经login,他上传了一张照片。 现在我想呈现他的个人资料页面。 我查询了我的项目模型Jon Doe – >现在我想要他上传的媒体文件。
那么,我怎么把我的媒体发布到Jon Doe的projectSchema
? 之后,在Angular中展示所有媒体的最佳方式是什么?
– – – 编辑 – – –
我一直试着用扩展器,我几乎设法使GET和POST的上传工作。 问题是,我不能从数据库中获取任何数据。 我的控制台给了我一个GET /uploads/media/[object%20Object] 304
。
目标是:编写project_id
,将文件写入mediaSchema。 所以当我打开一个项目时,我会得到所有与本项目的project_id
匹配的媒体。 我更新了我的代码:
HTML表单
<form id="uploadForm" enctype="multipart/form-data" action="/uploads/" method="post"> <label for="project_id">Ihre Projekt ID</label> <input type="text" name="project_id" value="{{projects._id}}" readonly> <input type="file" name="userPhoto"/> <button type="submit">Hochladen</button> </form> <hr> <img ng-src="{{media.img}}"/>
angular度控制器
var app = angular.module('myApp', []); var projectId = 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; var projectId = $scope.projects._id; }); //GET Media $http.get('/uploads/media/'+projectId).then(function(data){ console.log('Medien-Daten erhalten'); $scope.media = data; }); });
路由:
//FILE HANDLING FOR PROJECTMEDIA 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); }); });
mediaSchema
var mongoose = require ('mongoose'); var mediaSchema = mongoose.Schema({ img : {data: Buffer, contentType: String}, project_id : String, updated_at : {type: Date, default: Date.now } });
projectSchema
var projectSchema = mongoose.Schema({ author : String, name : String, description : String, tags : String, updated_at : {type: Date, default: Date.now }, active : {type: Boolean, default: false} });
回答你的问题。
我怎么把我的媒体发到Jon Doe的projectSchema?
在Angular中,你想使用$ http服务。 这很简单,你会是一个例子。
HTML
<input id="filebutton" name="filebutton" file-model="myFile" class="input-file" type="file"> <br> <button ng-click="postForm()" id="singlebutton" name="singlebutton" class="btn btn-primary">Upload</button>
APP
var app = angular.module('jsbin', []); //we need to use this directive to update the scope when the input file element is changed. app.directive('fileModel', ['$parse', function ($parse) { return { restrict: 'A', link: function(scope, element, attrs) { var model = $parse(attrs.fileModel); var modelSetter = model.assign; element.bind('change', function(){ scope.$apply(function(){ modelSetter(scope, element[0].files[0]); }); }); } }; }]); //use a service to handle the FormData upload. app.service('fileUpload', ['$http', function ($http) { this.uploadFileToUrl = function(file, uploadUrl){ var fd = new FormData(); fd.append('userPhoto', file); $http.post(uploadUrl, fd, { transformRequest: angular.identity, headers: {'Content-Type': undefined} }) .success(function(){ //all done! }) .error(function(){ }); }; }]); app.controller('DemoCtrl', function($scope, $http, fileUpload) { $scope.postForm = function(){ console.log($scope.myFile); // Run our multiparty function. fileUpload.uploadFileToUrl($scope.myFile, '/upload/'); }; });
之后,在Angular中展示所有媒体的最佳方式是什么?
假设你的端点工作正常。 你可以做一个$http
只有这个时候才能搞定。
JS
// make the request $http.get('/your/media').then(function(response){ //add to scope $scope.myMedia = response.data; });
HTML
<div ng-repeat="photo in myMedia">{{photo}}</div>
- 控制器是在DOM中加载,但视图没有加载,无法find控制器oclazyload与玉(pugjs)
- 如何使用loopback api资源pipe理器上传文件?
- node.js express没有收到请求
- 使用Node和Express构buildAngular应用程序时,是否有必要使用JADE?
- Express.jsredirect到HTTPS并发送index.html
- 如何使用会话在angular,nodejs,socket.io中保存数据
- login时,Stormpath不让我访问路线
- 在与Yeoman一起设置AngularJS项目后,发布“npm install”
- 运行firebase作为后端的同一个应用程序的多个域