在MEAN堆栈应用程序中上传逻辑的适当位置是什么?
所以我试图用mean stack(mongodb,express,angular,node.js)开发完整的应用程序。
我明白,使用快递和节点,我可以创build一个restAPI与端点来抓取我的应用程序的数据。 我也明白,棱angular仅适用于FRONT END。 所以我的问题是这样的…当你有一个像上传表单,你想上传一个图像到服务器,你想要创build一个叫“/ api / upload /”的API端点,并拥有所有的逻辑用于在该端点内上传图像,还是希望将所有上传逻辑上传到其他位置,然后仅通过发送请求将文件名提供给“/ api / upload /”端点?
我不是100%确定上传逻辑是什么意思 – 没有太多的需要,但我会把所有的东西(包括文件本身)放在一个POST
到/api/upload/
,然后保存它,但是你希望在该function。
把你的业务逻辑放在服务器端总是一个更好的方法,我build议你遵循这个方法。 如果您遵循这种方法,您可以根据需要轻松操作图像。 例如,当上传徽标或头像时,我们需要对图像进行裁剪,重新尺寸等操作,如同样的图像用于缩略图和个人资料图片。 这里这个方法对我们来说非常有意义。 我们可以对用户做出回应,并创build一个新的image processingstream程,而无需等待或通知最终用户。 大多数应用程序遵循这种方法以获得更好的体验
您可以应用一个关注点的分离 ,首先可以将file upload委托给客户端,使其更加“用户友好”,裁剪,resize,然后将生成的文件作为“文件”或base64发布到服务器进行存储它可以在数据库或文件系统中使用。
我build议为客户端组合这两个库:
Angular File Upload和ngImgCrop
那么你可以发布图像,并使用身体分析器“捕捉”的图像expression我build议你使用busboy ,它可能是一个端点的一部分,如你所说的像API /文件/上传例如
// your controller exports.uploadDocument = function(req,res, next){ req.pipe(req.busboy); req.busboy.on('file',function(fieldname, file, filename, encoding, contentType){ // implementation }); //updating req.body with busboy parameters req.busboy.on('field',function(fieldname,val){ req.body[fieldname] = val; }); req.busboy.on('finish', function() { // implementation next(); }); };
我希望有帮助。
简短的回答:快递应该做的上传,但它不必。
长答案:这是一个devise问题。 如果它是一个图像,你可以将图像发送到imgur api,并将返回的url发送到你的服务器,但是这比服务器端更不可靠。 人们可以从手机,平板电脑等使用您的网站,虽然图像上传是相当快速和一致的,但服务器将始终做到最快,因为它不依赖于客户端的无线连接强度。 Angular和Express同样擅长validation图像文件。
最重要的是 ,如果出现问题,您将需要logging尝试(也许图像)大多不能在客户端做到这一点。
我强烈build议你把你的逻辑移到后端,并用express来做,
- 更安全,因为代码不在客户端浏览器上公开
- 快速上传(虽然也可以在客户端快速,但如果客户端浏览器速度慢,会相对影响上传)
- 减less暴露给客户端浏览器的代码