2013-08-28 4 views
3

http://apidocjs.com/을 사용하여 Im은 내가 만들고있는 Express.js API에 대한 공개 문서를 만듭니다. 제 질문은 Express.js를 사용하여 문서를 라우팅하고 제공하는 방법은 무엇입니까?Express.js에서 jsdoc/apidoc을 호스팅하는 방법

'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를 선언하지 않고 내 문서를 호스팅 할 수있는 방법을 알고 있습니까 :

/** 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'));; 

가 여기에 내가 문서를 작성하는 데 사용할 내 툴툴 거리는 소리 파일입니다 :

은 여기 내 익스프레스 서버 설정의 '.. 모든 페이지마다? 어딘가에 자습서가 좋을 것입니다.

미리 감사드립니다.

답변

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

jwt와 같은 종류의 인증을 사용하는 경우 JWT/auth 미들웨어를 사용하기 전에'app.use (..'줄을 사용해야합니다. – avck

관련 문제