在MEAN堆栈应用程序中上传逻辑的适当位置是什么

时间:2015-04-21 22:48:27

标签: javascript angularjs node.js express upload

所以我试图用MEAN堆栈开发完整的应用程序(mongodb,express,angular,node.js)。

据我所知,使用express和node i可以使用端点创建一个rest api来获取我的应用程序的数据。我也明白,角度仅适用于FRONT END。所以我的问题是这个...当你有一个类似上传表格的东西并且你想将图像上传到服务器时,你想要创建一个名为" / api / upload /&#34的api端点吗? ;并拥有在该端点上传图像的所有逻辑,或者您是否希望在其他地方上传所有上传逻辑,然后只需将文件名提供给" / api / upload /"有帖子请求的端点?

5 个答案:

答案 0 :(得分:1)

我不是100%肯定上传逻辑的意思 - 没有太多需要,但我会将所有内容(包括文件本身)放在POST/api/upload/中,然后但是你希望在那个功能中保存它。

答案 1 :(得分:1)

将业务逻辑放在服务器端始终是一种更好的方法,我建议您遵循这种方法。如果您遵循此方法,则可以根据需要轻松操作图像。例如,当我们需要裁剪时,在上传徽标或头像的同时,对相同图像的图像重新调整大小等操作用于缩略图和个人资料图片。这种方法对我们来说非常有意义。我们可以响应用户并创建新的图像处理流程,而无需等待或通知最终用户。大多数应用程序遵循此方法以获得更好的体验

答案 2 :(得分:1)

您可以应用关注点分离,首先您可以将文件上传委托给客户更多用户友好",裁剪它,调整大小然后发布生成的文件为"文件"或者base64到服务器,用于将其存储在数据库或文件系统中。

我建议客户端使用这两个库的组合:

Angular File UploadngImgCrop

crop image

然后您可以发布图像并使用身体解析器来捕捉"快递中的图片我建议您使用busboy,它可能是您提到的端点的一部分,例如 api / file / upload

// 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();
        });
};

我希望有所帮助。

答案 3 :(得分:0)

简短回答:快递应该上传,但不是必须的。

答案很长:这是一个设计问题。如果是图像,您可以将图像发布到imgur api并将返回的URL发送到您的服务器,但是 比服务器端更不可靠。人们可能正在通过手机,平板电脑等使用您的网站,虽然图片上传速度相当快且一致,但服务器始终会以最快的速度完成,因为它并不依赖于客户端的无线连接强度。 Angular和Express同样擅长验证图像文件。

最重要的是,如果出现问题,您想要记录尝试(可能是图片),大部分都无法在客户端执行此操作。

答案 4 :(得分:0)

我强烈建议你将你的逻辑移到后端并用express表达,

  • 更安全,因为代码未在客户端浏览器上公开
  • 快速上传(虽然客户端也可以快速上传,但如果客户端浏览器速度慢,则会相对影响上传)
  • 减少公开客户端浏览器的代码