Giter Site home page Giter Site logo

node-serve-cgi's Introduction

#node-serve-cgi

Serve cgi by express or node

Install

npm install serve-cgi

Usage

var app = require('express')();
var cgi = require('serve-cgi')({
  root: __dirname + '/cgi-bin',
  roles: {
    '.php': '/usr/bin/php5-cgi',
    '.sh': '/bin/sh'
  },
  indexes: ['index.php', 'index.sh']
});

app.use('/cgi-bin', cgi);

// dir structure
//  app.js
//  cgi-bin/
//  └── index.php

Options

mount: (default: see Express app.use). See root.

root: (default: process.env.DOCUMENT_ROOT || process.cwd) The root of cgi dir. Work with mount, for example:

app.use('/cgi-bin', cgi({}))
// http://127.0.0.1/cgi-bin/hello.sh  =>  #{root}/hello.sh   mount = /cgi-bin

app.use('/cgi-bin', cgi({mount: '/'}))
// http://127.0.0.1/cgi-bin/hello.sh  =>  #{root}/cgi-bin/hello.sh   mount = /

app.use(cgi)
// http://127.0.0.1/cgi-bin/hello.sh  =>  #{root}/cgi-bin/hello.sh   mount = /

cwd: (default: same as root) The work directory of cgi processt.

indexes: (default: empty) An array of index filenames, when a directory is matched serve-cgi will try them in order. If none of index exists, serve-cgi will do nothing(jump to next middleware, if no middleware deal it, then 404)

roles: As you see in Usage

redirect_dir: (default true) If this is true, when you access 127.0.0.1/cgi/dir, you will jump to 127.0.0.1/cgi/dir/. This will be help in most case.

decorator: (default: do nothing) After cgi is invoked, you can decorate the result of cgi. For example, use layout decared in node.

// default implement
var decorator = function(headers, body, done) {
  // headers is an Object
  // headers.status is cgi status
  // headers['content-type'] is content-type
  // take care here, do not decorate binary data
  done(headers, body);
};

env: (default: {}) Set custom env into cgi, envs here has high priority. for example you can cover DOCUMENT_ROOT here.

logger: (default: console.log) Where to output logs about serve-cgi. stderr: (default: process.stdout.write) Where to output stderr of cgi.

POST requests

For some reasons, node-serve-cgi cannot get raw body from express 4 directly. So node-serve-cgi cannot deal POST requests directly. We need an extra middleware to get rawBody.

See https://github.com/jinchizhong/express-grab-body

Of course, you can set req.rawBody by other ways.

See demo/app.js...

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.