项目作者: chenweiqun

项目描述 :
Swagger to JS & Vue & Axios Codegen
高级语言: JavaScript
项目地址: git://github.com/chenweiqun/swagger-vue.git
创建时间: 2017-03-31T06:17:00Z
项目社区:https://github.com/chenweiqun/swagger-vue

开源协议:MIT License

下载


swagger-vue

Swagger to JS & Vue & Axios Codegen

Installation

  1. npm install swagger-vue --dev

Generate

Using NodeJS file

  1. const swaggerGen = require('swagger-vue')
  2. const jsonData = require('../api-docs.json')
  3. const fs = require('fs')
  4. const path = require('path')
  5. let opt = {
  6. swagger: jsonData,
  7. moduleName: 'api',
  8. className: 'api'
  9. }
  10. const codeResult = swaggerGen(opt)
  11. fs.writeFileSync(path.join(__dirname, '../dist/api.js'), codeResult)

Using Grunt task

Create Gruntfile.js

  1. const fs = require('fs')
  2. const path = require('path')
  3. const swaggerGen = require('swagger-vue')
  4. module.exports = function(grunt) {
  5. grunt.initConfig({
  6. 'pkg': grunt.file.readJSON('package.json'),
  7. 'swagger-vue-codegen': {
  8. options: {
  9. swagger: "<%= pkg.swagger.definition %>",
  10. className: "<%= pkg.swagger.className %>",
  11. moduleName: "vue-<%= pkg.swagger.moduleName %>",
  12. dest: 'client/javascript'
  13. },
  14. dist: {
  15. }
  16. }
  17. });
  18. grunt.registerMultiTask('swagger-vue-codegen', function() {
  19. var callback = this.async();
  20. var opt = this.options();
  21. var distFileName = path.join(opt.dest, opt.moduleName + '.js');
  22. fs.readFile(opt.swagger, function(err, data) {
  23. if (err) {
  24. grunt.log.error(err.toString());
  25. callback(false);
  26. } else {
  27. var parsedData = JSON.parse(data);
  28. var codeResult = swaggerGen({
  29. swagger: parsedData,
  30. moduleName: opt.moduleName,
  31. className: opt.className
  32. });
  33. fs.writeFile(distFileName, codeResult, function(err) {
  34. if (err) {
  35. grunt.log.error(err.toString());
  36. callback(false);
  37. } else {
  38. grunt.log.writeln('Generated ' + distFileName + ' from ' + opt.swagger);
  39. }
  40. })
  41. }
  42. });
  43. });
  44. grunt.registerTask('vue', ['swagger-vue-codegen']);
  45. };

And set options in package.json

  1. ...
  2. "swagger": {
  3. "definition": "client/swagger.json",
  4. "className": "API",
  5. "moduleName": "api-client"
  6. }
  7. ...

Now you can use grunt vue to run build task

Generated client usage

In Vue.js main file set API domain

  1. import { setDomain } from './lib/api-client.js'
  2. setDomain('http://localhost:3000/api')

Import API function into Vue.js component, for example to log in

  1. import { user_login as userLogin } from '../lib/api-client.js'
  2. userLogin({
  3. credentials: {
  4. username: 'admin',
  5. password: 'admin'
  6. }
  7. }).then(function (response) {
  8. console.log(response.data) // {id: "<token>", ttl: 1209600, created: "2017-01-01T00:00:00.000Z", userId: 1}
  9. })

All requests use axios module with promise, for more information about that follow axios documentation

Links

License

MIT