From dc0955320b7df92c29b873206ec66ee431b14a17 Mon Sep 17 00:00:00 2001 From: fengmk2 Date: Sun, 18 Apr 2021 13:55:02 +0800 Subject: [PATCH] feat: export models ref to app (#1634) let custom middleware can access app.models --- .travis.yml | 3 +-- config/index.js | 6 ++++-- index.js | 12 ------------ models/module.js | 14 -------------- servers/registry.js | 2 ++ servers/web.js | 3 +++ test/controllers/registry/package/list.test.js | 1 + test/controllers/web/user/show.test.js | 1 + 8 files changed, 12 insertions(+), 30 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2de2822..a46a96b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,7 @@ -sudo: false language: node_js node_js: - - '8' - '10' + - '12' services: - mysql - postgresql diff --git a/config/index.js b/config/index.js index 145240c..f1cf1bc 100644 --- a/config/index.js +++ b/config/index.js @@ -302,16 +302,18 @@ var config = { if (process.env.NODE_ENV === 'test') { config.enableAbbreviatedMetadata = true; - config.customRegistryMiddlewares.push(() => { + config.customRegistryMiddlewares.push((app) => { return function* (next) { this.set('x-custom-middleware', 'true'); + this.set('x-custom-app-models', typeof app.models.query === 'function' ? 'true' : 'false'); yield next; }; }); - config.customWebMiddlewares.push(() => { + config.customWebMiddlewares.push((app) => { return function* (next) { this.set('x-custom-web-middleware', 'true'); + this.set('x-custom-web-app-models', typeof app.models.query === 'function' ? 'true' : 'false'); yield next; }; }); diff --git a/index.js b/index.js index cdc513e..b6fda9c 100644 --- a/index.js +++ b/index.js @@ -1,17 +1,5 @@ -/**! - * Copyright(c) cnpmjs.org and other contributors. - * MIT Licensed - * - * Authors: - * dead_horse (http://deadhorse.me) - */ - 'use strict'; -/** - * Module dependencies. - */ - var config = require('./config'); exports.loadConfig = config.loadConfig; diff --git a/models/module.js b/models/module.js index 9ce9df8..9e1b08b 100644 --- a/models/module.js +++ b/models/module.js @@ -1,19 +1,5 @@ -/**! - * cnpmjs.org - models/module.js - * - * Copyright(c) fengmk2 and other contributors. - * MIT Licensed - * - * Authors: - * fengmk2 (http://fengmk2.github.com) - */ - 'use strict'; -/** - * Module dependencies. - */ - /* CREATE TABLE IF NOT EXISTS `module` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'primary key', diff --git a/servers/registry.js b/servers/registry.js index 089d059..cadc315 100644 --- a/servers/registry.js +++ b/servers/registry.js @@ -16,6 +16,7 @@ var block = require('../middleware/block'); var auth = require('../middleware/auth'); var staticCache = require('../middleware/static'); var notFound = require('../middleware/registry_not_found'); +var models = require('../models'); var cors = require('kcors'); var proxyToNpm = require('../middleware/proxy_to_npm'); var maxrequests = require('koa-maxrequests'); @@ -52,6 +53,7 @@ app.use(notFound); app.use(conditional()); app.use(etag()); +app.models = models; for (const middleware of config.customRegistryMiddlewares) { app.use(middleware(app)); } diff --git a/servers/web.js b/servers/web.js index e9b658f..a1a6d1b 100644 --- a/servers/web.js +++ b/servers/web.js @@ -17,6 +17,7 @@ var auth = require('../middleware/auth'); var proxyToNpm = require('../middleware/proxy_to_npm'); var routes = require('../routes/web'); var config = require('../config'); +var models = require('../models'); var jsonp = require('koa-safe-jsonp'); var path = require('path'); var http = require('http'); @@ -42,6 +43,8 @@ if (config.pagemock) { })); } +// add app.models, let middleware can access models ref +app.models = models; for (const mw of config.customWebMiddlewares) { app.use(mw(app)); } diff --git a/test/controllers/registry/package/list.test.js b/test/controllers/registry/package/list.test.js index cd00ed4..b9d6f52 100644 --- a/test/controllers/registry/package/list.test.js +++ b/test/controllers/registry/package/list.test.js @@ -49,6 +49,7 @@ describe('test/controllers/registry/package/list.test.js', () => { var data = res.body; data.name.should.equal('@cnpmtest/testmodule-list-1'); assert(res.headers['x-custom-middleware'] === 'true'); + assert(res.headers['x-custom-app-models'] === 'true'); done(); }); }); diff --git a/test/controllers/web/user/show.test.js b/test/controllers/web/user/show.test.js index 2f2744b..5e288cb 100644 --- a/test/controllers/web/user/show.test.js +++ b/test/controllers/web/user/show.test.js @@ -82,6 +82,7 @@ describe('controllers/web/user/show.test.js', function () { // he.enclde('fengmk2@gmail.com') ↓ assert(res.text.includes('fengmk2@gmail.com')); assert(res.headers['x-custom-web-middleware'] === 'true'); + assert(res.headers['x-custom-web-app-models'] === 'true'); done() }); });