diff --git a/.jsbeautifyrc b/.jsbeautifyrc new file mode 100644 index 0000000..f4b0e8c --- /dev/null +++ b/.jsbeautifyrc @@ -0,0 +1,11 @@ +{ + "indent_size": 2, + "indent_char": " ", + "other": " ", + "indent_level": 0, + "indent_with_tabs": false, + "preserve_newlines": true, + "max_preserve_newlines": 2, + "jslint_happy": true, + "indent_handlebars": true +} diff --git a/README.md b/README.md index 8265bfc..391d7c9 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ China大陆用户请自行优化网络。 $ git clone https://github.com/yi-ge/koa2-API-scaffold.git $ cd mv koa2-API-scaffold -$ npm install +$ npm install $ npm run dev # 可执行npm start跳过ESlint检查。 ``` @@ -151,7 +151,7 @@ $ docker run -itd -p 80:80 -p 443:443 -v `pwd`/nginx_config:/etc/nginx/conf.d ng > 引入插件的版本将会持续更新 引入的插件: -`koa@2 koa-body@2 koa-router@next koa-session2 koa-static2 koa-compose koa-multer require-directory babel-cli babel-register babel-plugin-transform-runtime babel-preset-es2015 babel-preset-stage-2 gulp gulp-eslint eslint eslint-config-standard eslint-friendly-formatter eslint-plugin-html eslint-plugin-promise nodemailer promise-mysql` +`koa@2 koa-body@2 koa-router@next koa-session2 koa-static2 koa-compose require-directory babel-cli babel-register babel-plugin-transform-runtime babel-preset-es2015 babel-preset-stage-2 gulp gulp-eslint eslint eslint-config-standard eslint-friendly-formatter eslint-plugin-html eslint-plugin-promise nodemailer promise-mysql` **koa2**: HTTP框架  Synopsis: HTTP framework. @@ -177,10 +177,6 @@ $ docker run -itd -p 80:80 -p 443:443 -v `pwd`/nginx_config:/etc/nginx/conf.d ng  Synopsis: Compose several middleware into one.  From: https://github.com/koajs/compose -**koa-multer**: 处理数据中间件 - Synopsis: Multer is a node.js middleware for handling multipart/form-data for koa. - From: https://github.com/koa-modules/multer - **require-directory**: 递归遍历指定目录  Synopsis: Recursively iterates over specified directory.  From: https://github.com/troygoode/node-require-directory @@ -270,6 +266,10 @@ HTTP2推送中间件:https://github.com/silenceisgolden/koa-server-push **koa-onerror**: Koa的错误拦截中间件,需要配合上面的插件使用:https://github.com/koajs/onerror +**koa-multer**: 处理数据中间件 + Synopsis: Multer is a node.js middleware for handling multipart/form-data for koa. + From: https://github.com/koa-modules/multer + 目录结构说明 ------------ diff --git a/package.json b/package.json index f03f635..0a457eb 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,6 @@ "koa": "^2.0.0", "koa-body": "^2.0.0", "koa-compose": "^2.5.1", - "koa-multer": "^1.0.1", "koa-router": "^7.0.1", "koa-session2": "^1.0.8", "koa-static2": "^0.1.8", diff --git a/src/app.js b/src/app.js index 0e3270e..339bf92 100644 --- a/src/app.js +++ b/src/app.js @@ -2,7 +2,9 @@ import Koa2 from 'koa' import KoaBody from 'koa-body' import KoaSession from 'koa-session2' import KoaStatic from 'koa-static2' -import { SystemConfig } from './config' +import { + SystemConfig +} from './config' import path from 'path' import MainRoutes from './routes/main-routes' import ErrorRoutes from './routes/error-routes' @@ -11,26 +13,31 @@ import ErrorRoutes from './routes/error-routes' const app = new Koa2() const env = process.env.NODE_ENV || 'development' // Current mode -app.use(KoaBody({ - multipart: true, - strict: false - // formidable: {uploadDir: path.join(__dirname, '../../../assets/uploads/')} -})) // Processing request -.use(KoaStatic('assets', path.resolve(__dirname, '../assets'))) // Static resource -.use(KoaSession({key: SystemConfig.Session_Key})) // Set Session -// .use(PluginLoader(SystemConfig.System_plugin_path)) -.use((ctx, next) => { - if (ctx.request.header.host.split(':')[0] === 'api.XXX.com' || ctx.request.header.host.split(':')[0] === '127.0.0.1') { - ctx.set('Access-Control-Allow-Origin', '*') - ctx.set('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept') - ctx.set('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS') - ctx.set('Access-Control-Allow-Credentials', true) // 允许带上 cookie - } - return next() -}) -.use(MainRoutes.routes()) -.use(MainRoutes.allowedMethods()) -.use(ErrorRoutes()) +app + .use(KoaBody({ + multipart: true, + strict: false, + formidable: { + uploadDir: path.join(__dirname, '../assets/uploads') + } + })) // Processing request + .use(KoaStatic('assets', path.resolve(__dirname, '../assets'))) // Static resource + .use(KoaSession({ + key: SystemConfig.Session_Key + })) // Set Session + // .use(PluginLoader(SystemConfig.System_plugin_path)) + .use((ctx, next) => { + if (ctx.request.header.host.split(':')[0] === 'api.XXX.com' || ctx.request.header.host.split(':')[0] === '127.0.0.1') { + ctx.set('Access-Control-Allow-Origin', '*') + ctx.set('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept') + ctx.set('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS') + ctx.set('Access-Control-Allow-Credentials', true) // 允许带上 cookie + } + return next() + }) + .use(MainRoutes.routes()) + .use(MainRoutes.allowedMethods()) + .use(ErrorRoutes()) if (env === 'development') { // logger app.use((ctx, next) => { diff --git a/src/controllers/upload.js b/src/controllers/upload.js index 068c270..d4c59c9 100644 --- a/src/controllers/upload.js +++ b/src/controllers/upload.js @@ -1,35 +1,3 @@ -import multer from 'koa-multer' -import path from 'path' - -/*** - * 说明:该方法只支持:`multipart/form-data`方式的上传。postman可以调试。 - */ - -let storage = multer.diskStorage({ - // 设置上传后文件路径 - destination: function (req, file, cb) { - cb(null, path.join(__dirname, '../../../assets/uploads/')) - }, - // 给上传文件重命名,获取添加后缀名 - filename: function (req, file, cb) { - let fileFormat = (file.originalname).split('.') - cb(null, Date.now() + '.' + fileFormat[fileFormat.length - 1]) - } -}) - -export let upload = multer({ - storage: storage, - // dest: 'uploads/', //上传文件保存的路径,如果你想在上传时进行更多的控制, 你可以使用storage选项替代dest. Multer 具有 DiskStorage 和 MemoryStorage 两个存储引擎; 另外还可以从第三方获得更多可用的引擎. - // fileFilter: function (req, file, cb) { - // let mimetypes = (['text/*', 'image/*', 'video/*', 'audio/*', 'application/zip']).join(','); - // let testItems = file.mimetype.split('/'); - // if ((new RegExp('\b' + testItems[0] + '/\*', 'i')).test(mimetypes) || (new RegExp('\*/' + testItems[1] + '\b', 'i')).test(mimetypes) || (new RegExp('\b' + testItems[0] + '/' + testItems[1] + '\b', 'i')).test(mimetypes)) { - // cb(null, true); - // } else { - // return cb(new Error('Only image, plain text, audio, video and zip format files are allowed!'), false); - // } - // }, // fileFilter要在这里声明才行,用instance.fileFilter = funciton(){};是不管用的, - limits: { - fileSize: 200 * 1024 * 1024 // Max file size in bytes (20 MB) 限制上传的文件大小,不设置则是无限 - } -}) +export default (ctx) => { + ctx.body = ctx.request.body +} diff --git a/src/routes/main-routes.js b/src/routes/main-routes.js index f446134..f4c60eb 100644 --- a/src/routes/main-routes.js +++ b/src/routes/main-routes.js @@ -7,14 +7,7 @@ router .get('/', function (ctx, next) { ctx.body = '禁止访问!' }) // HOME 路由 - .all('/upload', controllers.upload.upload.array('file'), function (ctx, next) { // 上传到本地示例 - return new Promise(function (resolve, reject) { - // 允许跨域,正式环境要改为对应域名 - ctx.set('Access-Control-Allow-Origin', '*') - // ctx.req.files.filename = ctx.req.files.path - resolve(ctx.body = ctx.req.files) - }) - }) + .all('/upload', controllers.upload.default) .get('/api/:name', controllers.api.Get) .post('/api/:name', controllers.api.Post) .put('/api/:name', controllers.api.Put)