javascriptnode.jsformidable

Formidable is not defined in Node.js


I am trying to create an HTTP server that the user can upload images and archives, and for that I am using formidable for handling the upload part.

My code :

requestHandler.js

 // Request Handlers (will handle all requests that happen)

    // Allows Node.js to make use of a non-blocking operation: exec ();
    var exec = require("child_process").exec;
    var querystring = require("querystring");
    fs = require("fs");
    var fomidable = require("formidable");

    function start(response, postData) {
        console.log("Request handler 'start' was called");
        var body = '<html>' +
        '<head>' +
        '<meta http-equiv = "Content-Type" content = "text/html";'+
        'charset="UTF-8"/>' +
        '</head>' +
        '<body>' +
        '<form action = "/upload" enctype = "multipart/form-data"' +
        'method = "post">' +
        '<input type ="file" name = "upload multiple = "multiple">' +
        '<input type = "submit" value ="Upload file" />' +
        '</form>' +
        '</body>' +
        '</html>';

        response.writeHead(200, {"Content-Type" : "text/html"});
        response.write(body);
        response.end();
    }

        // What is being passed between router.js and requestHandler.js is the entire body of the POST data request.

    function upload(response, request) {
        console.log("Request handler 'upload' was called");

        var form = new formidable.IncomingForm();
        console.log("about to parse");
        form.parse(request, function(error, fields, files) { 
        console.log("parsing done");

        /*Possible error on Windows systems; tried to rename to an already existing file*/

        fs.rename(files.upload.path, "/tmp/test.png", function(err) {
            if(err) {
                fs.unlink("/tmp/test.png");
                fs.rename(files.upload.path, "/tmp/test.png");
            }
        });
        response.writeHead(200, {"Content-Type" : "text/plain"});
        response.write("You've sent the text : " + querystring.parse(postData).text);
        response.write("\nHello Upload");
        response.end();
    });
    }

    function show(response) {
        console.log("Request handler 'show' was called.");
        fs.readFile("/tmp/test.png", "binary", function(error,file) {
            if(error) {
                response.writeHead(500, {"Content-Type" : "text/plain"});
                response.write(err + "\n");
                response.end();
            } else {
                response.writeHead(200, {"Content-Type" : "image/png"});
                response.write(file, "binary");
                reponse.end();
            }
        });
    }
    exports.start = start;
    exports.upload = upload;
    exports.show = show;

I am using too formidable in the another part of my code, in my server.js but there for some reason works (And for that reason I am not posting the code), the error point out to requestHandler.js in line 35 :

var form = new formidable.IncomingForm();

formidable is not defined

How can I make formidable defined ? When I am already doing that calling in the first place in :

var formidable = require("formidable");

Solution

  • I think you have a typo...

    var fomidable = require("formidable");
    

    Should probably be:

    var formidable = require("formidable");
    

    Hence the formidable is not defined... you defined it as fomidable.