如何在feathersjs中解决请求实体太大的错误?

问题描述 投票:1回答:3

我在羽毛服务中上传csv文件,文件大小为203kb,它会抛出一个错误请求实体太大的错误,就像这样。

错误:

{
    "name": "GeneralError",
    "message": "request entity too large",
    "code": 500,
    "className": "general-error",
    "data": {},
    "errors": {}
}

我正在写这样的中间件代码,但我无法解决

app.js:

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

location.service.js:

// Initializes the `location` service on path `/location`
const createService = require('feathers-mongoose');
const createModel = require('../../models/location.model');
const hooks = require('./location.hooks');
const filters = require('./location.filters');
const multer = require('multer');
const multipartMiddleware = multer();

module.exports = function () {
  const app = this;
  const Model = createModel(app);
  const paginate = app.get('paginate');

  const options = {
    name: 'location',
    Model,
    paginate
  };

  // Initialize our service with any options it requires
  app.use('/location',
      multipartMiddleware.single('uri'),
        (req, res, next) => {
            req.feathers.file = req.file;
            next();
        },
    createService(options)
  );

  // Get our initialized service so that we can register hooks and filters
  const service = app.service('location');

  service.hooks(hooks);

  if (service.filter) {
    service.filter(filters);
  }
};

location.hooks.js:

const { authenticate } = require('feathers-authentication').hooks;

module.exports = {
  before: {
    all: [ authenticate('jwt') ],
    find: [],
    get: [],
    create: [function(hook, next){

        var tHeader = Object.keys(hook.data)[0].split('\n')[0].replace(/\r?\n|\r/g, " ").split(',');
        var s = Object.keys(hook.data)[0].split('\n');
            s.shift();
        var tBody = s.map(d=> d.replace(/\r?\n|\r/g, " ").split(','));
        var jointObj = [];

        const mergeArrToJSON = (a, b) => a
            .map((item, i) => ({[item.replace(/\s+/g,'')]: b[i]}))
            .reduce((json,val)=>Object.assign({},json,val));

        tBody.forEach(p1=>{
            var a = tHeader, b = p1;
            jointObj.push(mergeArrToJSON(a,b))
        })

        var insertObj = [];
        jointObj.pop()
        jointObj.forEach(d=>{
            var Obj = {};
            for(k in d) {
                var f = /[/]/;
                if(f.test(k) == true){
                    var s = k.split('/');
                    if(Obj.hasOwnProperty(s[0]) !== true){
                        Obj[s[0]] = {[s[1].charAt(0).toLowerCase() + s[1].slice(1)]:d[k]};
                    } else {
                        Obj[s[0]][s[1].replace(/\s+/g,'')] = d[k].replace(/\s+/g,'');
                    }
                } else {
                    Obj[k] = d[k];
                }
            }
            insertObj.push(Obj)
        });

        hook.data = insertObj;
        next();
    }],
    update: [],
    patch: [],
    remove: []
  },

  after: {
    all: [],
    find: [],
    get: [],
    create: [],
    update: [],
    patch: [],
    remove: []
  },

  error: {
    all: [],
    find: [],
    get: [],
    create: [],
    update: [],
    patch: [],
    remove: []
  }
};

我正在使用邮递员上传csv文件

enter image description here

javascript node.js mongodb csv feathersjs
3个回答
3
投票

我在app.js文件中更改了代码

之前:

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

后:

app.use(bodyParser.json({limit: '100mb'}));
app.use(bodyParser.urlencoded({
  limit: '100mb',
  extended: true
}));

2
投票

我在我的Node / express应用程序中遇到了同样的问题,我使用了它,它解决了我的问题,希望它对你也有用:

app.use(bodyParser.json({limit:1024102420, type:'application/json'}));

我使用限制的数字格式来指定字节数


0
投票

打开app.js文件并替换以下行

app.use(express.json());
app.use(express.urlencoded({ extended: true }));

app.use(express.json({ limit: "50mb" }));
app.use(express.urlencoded({ limit: "50mb", extended: true }));
© www.soinside.com 2019 - 2024. All rights reserved.