feat: export models ref to app (#1634)

let custom middleware can access app.models
This commit is contained in:
fengmk2
2021-04-18 13:55:02 +08:00
committed by GitHub
parent aa7cb3df01
commit dc0955320b
8 changed files with 12 additions and 30 deletions

View File

@@ -1,8 +1,7 @@
sudo: false
language: node_js
node_js:
- '8'
- '10'
- '12'
services:
- mysql
- postgresql

View File

@@ -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;
};
});

View File

@@ -1,17 +1,5 @@
/**!
* Copyright(c) cnpmjs.org and other contributors.
* MIT Licensed
*
* Authors:
* dead_horse <dead_horse@qq.com> (http://deadhorse.me)
*/
'use strict';
/**
* Module dependencies.
*/
var config = require('./config');
exports.loadConfig = config.loadConfig;

View File

@@ -1,19 +1,5 @@
/**!
* cnpmjs.org - models/module.js
*
* Copyright(c) fengmk2 and other contributors.
* MIT Licensed
*
* Authors:
* fengmk2 <fengmk2@gmail.com> (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',

View File

@@ -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));
}

View File

@@ -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));
}

View File

@@ -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();
});
});

View File

@@ -82,6 +82,7 @@ describe('controllers/web/user/show.test.js', function () {
// he.enclde('fengmk2@gmail.com') ↓
assert(res.text.includes('&#x66;&#x65;&#x6E;&#x67;&#x6D;&#x6B;&#x32;&#x40;&#x67;&#x6D;&#x61;&#x69;&#x6C;&#x2E;&#x63;&#x6F;&#x6D;'));
assert(res.headers['x-custom-web-middleware'] === 'true');
assert(res.headers['x-custom-web-app-models'] === 'true');
done()
});
});