将上载的文件分配给loopback中的model属性

时间:2016-09-20 05:42:13

标签: node.js loopbackjs multer body-parser

美好的一天,

我是node.js生态系统的新手,所以请原谅我是一名初学者。我基本上想要配置loopback,bodyparser和multer做一件事,我希望Phone.imageFile属性从上传的图像文件中获取值。通过邮递员发布我的Phone模型数据,其中body作为表单数据,没有额外的标题会导致以下错误。

"error": {
"name": "ValidationError",
"status": 422,
"message": "The `Phone` instance is not valid. Details: `imageFile` can't be blank (value: undefined).",
"statusCode": 422,
"details": {
  "context": "Phone",
  "codes": {
    "imageFile": [
      "presence"
    ]
  },
  "messages": {
    "imageFile": [
      "can't be blank"
    ]
  }
}

我还可以通过以下配置验证图像文件是否正在上传到 ./ phoneImageFiles / 文件夹。我还可以说这些字段已正确读取,因为错误消息未提及其他必需的非可空字段

'use strict';

var loopback = require('loopback');
var boot = require('loopback-boot');
var bodyParser = require('body-parser');
var multer = require('multer');

var app = module.exports = loopback();

app.use(bodyParser.json()); // for parsing application/json
app.use(bodyParser.urlencoded({ extended: true }));
app.use(multer({dest:'./phoneImageFiles/', }).single("imageFile"));
有人可以帮帮我吗?我尝试做app.use()配置,我之前通过stackoverflow / google搜索看到,但似乎这样做是无效的,因为在那些内部打印一个console.log似乎什么都不做(可能没有被调用)

github repo:https://github.com/silencer07/PinoyDroidMatch

谢谢!

1 个答案:

答案 0 :(得分:0)

确定。离开一段时间后,我能够找到一种方法来做到这一点。请注意,我的应用上传文件只有管理员访问权限,因此我选择使用内存存储,而且它们只是图像文件,因此我选择将缓冲区本身存储到mongodb文档中(不管是真实的项目)

配置mutler:

var multer = require('multer');
var storage = multer.memoryStorage();

app.use(multer({storage : storage, }).single("imageFile"));

在远程钩子之前配置:

Phone.beforeRemote('**', function (ctx, unused, next) {
    var req = ctx.req;

    //uploaded using multer
    if(req.file){
        var imageFile = req.file.buffer;
        var fileName = req.file.originalname;
        console.log("uploaded file:" + fileName);
        var imageFileType = fileName.substring(fileName.indexOf(".") + 1, fileName.length);

        req.body.imageFile = imageFile;
        req.body.imageFileType = imageFileType;            
    }
    next();
});

此致