serve-cgi

0.6.1 • Public • Published

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...

Readme

Keywords

none

Package Sidebar

Install

npm i serve-cgi

Weekly Downloads

0

Version

0.6.1

License

BSD

Last publish

Collaborators

  • pjincz