expressjs-gitdeprecated

Serve and receive git repositories with express.

Usage no npm install needed!

<script type="module">
  import expressjsGit from 'https://cdn.skypack.dev/expressjs-git';
</script>

README

expressjs-git

Serve and receive git repositories with express.

Installation

npm i expressjs-git

Work in progress

  • Callbacks
  • Authentification

Simple usage

var express = require('express');
var expressGit = require('express-git');

var app = express();

var reposMiddle = expressGit({
    folder: path.join(__dirname, 'repos')
});

app.use('/repos/:repository', reposMiddle);

app.listen(8080, function()
{
    console.log('App and running on port 8080.');
});

The middleware created here looks for repositories in the folder, provided via the folder option. It's done by path.joining the folder with the parameter repository within the url (meaning, you must provide it). This is not working recursive. However, you can replace the "resolve repository path"-logic with your own. See the next section.

Advanced usage

npm i glob

var path = require('path');

var express = require('express');
var expressGit = require('express-git');

var glob = require('glob');

var app = express();

var reposMiddle = expressGit({
    folder: path.join(__dirname, 'repos'),
    resolve: function(request, done)
    {
        if(request.params.repo == null)
        {
            done(new Error('"Repo" not defined.'), null);
            return;
        }

        glob(path.join(this.folder, '**', request.params.repo), function(error, files)
        {
            if(error != null || files.length === 0)
            {
                done(error == null ? new Error(request.params.repo + ' not found.') : error);
                return;
            }

            done(null, files[0]);
        });
    }
});

app.use('/repos/:repo', reposMiddle);

app.listen(8080, function()
{
    console.log('App and running on port 8080.');
});

The middleware created here uses glob to search recursively within folder (yes, this is the complete options-object). The repository is identified by the repo url parameter.