Node Express图片上使用formidable库报出TypeError require is not a function

前端的一些坑

Winter

2017-11-21

使用Node Express做图片上传功能,会经常用到formidable这个库,老版本的Node对图片上传的功能是比较难处理的,有了formidable这一切都简单多了,只需要如下的一段简单的代码就可以完成图片的上传

    //保存上传的文件
    saveUploadFile: function(req, dirname, callback){
        var userDirPath = Path.resolve(this.MAIN+dirname);
        var form = new formidable.IncomingForm(); //创建上传表单
        form.encoding = 'utf-8'; //设置编辑
        form.uploadDir = userDirPath; //设置上传目录
        form.keepExtensions = true; //保留后缀
        form.maxFieldsSize = 2 * 1024 * 1024; //文件大小
        form.type = true;
        var displayUrl;

        form.parse(req, function(err, fields, files) {
            if (err) {
                callback(false, "上传失败");
                return;
            }

            var extName = ''; //后缀名
            switch (files.file.type) {
                case 'image/pjpeg':
                    extName = 'jpg';
                    break;
                case 'image/jpeg':
                    extName = 'jpg';
                    break;
                case 'image/png':
                    extName = 'png';
                    break;
                case 'image/x-png':
                    extName = 'png';
                    break;
                default:
                    extName = files.file.name.substring(files.file.name.lastIndexOf("."));
                    break;
            }
            if (extName.length === 0) {
                callback(false, 2023); //文件格式错误
                return;
            } else {
                var picName = fields.name || Date.now();
                var avatarName = '/' + picName + '.' + extName;
                var newPath = form.uploadDir + avatarName;
                fs.renameSync(files.file.path, newPath); //重命名

                callback(true, dirname+avatarName);
            }
        });
    },

但是在编译的时候却会遇到一个非常棘手的问题,编译器报出了如下的错误:

/Users/yanglidong/Documents/Work/Company/Git/YLD/samyoc/dist/server/server.js:257847
	var crypto = require('crypto');
	             ^

TypeError: require is not a function
    at Object.map../file (/Users/yanglidong/Documents/Work/Company/Git/YLD/samyoc/dist/server/server.js:257847:15)

从这里TypeError: require is not a function我们可以看出,我们在模块应用的require函数无效了,说它不是一个函数。这是个很无厘头的问题,即不是代码问题也不是环境问题,找遍了所有地方也没找到问题。最后在Stack Overflow上找到提示。

要解决这个问题只需要在webconfig文件中,添加定义"global.GENTLY": false,因为formidable库是有使用到GENTLY库的。

var serverConfig = {
  plugins: [
    new webpack.DefinePlugin({
        "global.GENTLY": false,
        '__isServer__': true,
        '__isClient__': false,
        '_isDevelopment_': true,
        location: {
            origin: "'http://localhost:3001'"
        }
    }),
    .
    .
    .
};

 

第30篇《Node Express图片上使用formidable库报出TypeError require is not a function》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

1个回答
Winter 2017.11.28
要解决这个问题只需要在webconfig文件中,添加定义"global.GENTLY": false,因为formidable库是有使用到GENTLY库的。

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android