在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暴露给客户端浏览器的代码