2013-08-28 3 views
3

Im, используя http://apidocjs.com/, чтобы создать публичную документацию для API Express.js, которую я создаю. Мой вопрос: как я могу использовать Express.js для маршрутизации и обслуживания документации?Как разместить jsdoc/apidoc в Express.js

Вот мой Экспресс настройки сервера:

/** Load config into globally defined __config 
* @requires fs */ 
var fs = require('fs'); 
__config = JSON.parse(fs.readFileSync('config/config.json')); 

/** Custom Logging Moduele 
* @requires ninja_modules/jacked-logger */ 
log = require('./ninja_modules/jacked-logger'); 

/** Configure the Express Server 
* @requires express 
* @param {function} the callback that configures the server */ 
var express = require('express'); 
var app = express(); 
app.configure(function() { 
    /** Sets default public directory */ 
    app.use(express.static(__dirname + '/public')); 
    /** Sets root views directory */ 
    app.set('views', __dirname + '/public/views'); 
    /** Compress response data with gzip/deflate. */ 
    app.use(express.compress()); 
    /** Request body parsing middleware supporting JSON, urlencoded, and multipart requests. */ 
    app.use(express.bodyParser()); 
    /** Compress response data with gzip/deflate. */ 
    app.use(express.methodOverride()); 
    /** Set Express as the Router */ 
    app.use(app.router); 
    /** .html files, EJS = Embedded JavaScript */ 
    app.engine('html', require('ejs').renderFile); 
    /** Default view engine name for views rendered without extensions */ 
    app.set('view engine', 'html'); 

    /** Custom Error Logging 
    * @requires ninja_modules/jacked-logger 
    * @param {object} err - error object 
    * @param {object} req - reqiuest object 
    * @param {object} res - response object 
    * @param {function} next - go to the next error */ 
    app.use(function(err, req, res, next) { 
     log.error(err.stack); 
     res.status(500); 
     next(err); 
    }); 
}); 
/** Set express to listen to the port defined in the configuration file */ 
var appServer = app.listen(__config.port, function(){ 
    log.sys("Express server listening on port " + appServer.address().port + " in " + app.settings.env + " mode"); 
}); 

// add documentation 
app.use('/api', express.static(__dirname + '/public/documentation/api')); 
app.use('/dev', express.static(__dirname + '/public/documentation/developer'));; 

Вот мой файл пехотинец, который я использую для создания документации:

'use strict'; 

module.exports = function(grunt) { 
    grunt.initConfig({ 
     jsdoc : { 
      dist : { 
       src: ['*.js', 'config/*.json', 'ninja_modules/*.js','workers/*.js'], 
       options: { 
        destination: 'public/documentation/developer', 
        private: true 
       } 
      } 
     }, 
     apidoc: { 
      ninjapi: { 
       src: 'router/', 
       dest: 'public/documentation/api/', 
       options: { 
        includeFilters: [ ".*\\.js$" ] 
       }    
      } 
     } 
    }); 
    grunt.loadNpmTasks('grunt-jsdoc'); 
    grunt.loadNpmTasks('grunt-apidoc'); 
    grunt.registerTask('default', ['jsdoc','apidoc']); 
} 

Кто-нибудь знает, как я могу провести свою документацию без объявления app.get (

Заранее благодарен

ответ

0

Моя проблема оказалась в том, что я использовал __dirname в другом файле ожидая, что она будет корневой каталог. Теперь это очевидно, что я думаю об этом. Если файл содержит __dirname, то __dirname = [the directory of that file] не каталог, в который требуется файл (модуль).

Это вызывало ошибки поиска.

Спасибо за помощь!

7

Вам не нужно указывать маршруты для обслуживания каждого статического файла.

Это должно быть достаточно:

app.use('/api', express.static(__dirname + '/public/documentation/api')); 

Но если каталог public/documentation/api не содержит индексный файл, вы получите сообщение об ошибке запроса.

Так что это вместо того, который позволяет просматривать каталоги:

app.use('/api', express.static(__dirname + '/public/documentation/api')); 
app.use('/api', express.directory(__dirname + '/public/documentation/api')); 
+0

Если вы используете какой-то тип auth, например jwt, 'app.use (..' должна быть перед использованием промежуточного программного обеспечения JWT/auth – avck

Смежные вопросы