Articles of 中间件

在Express中为中间件testing提出请求\响应

我在Express应用程序中有一些中间件function,它们向一个单独的服务器发出请求,然后将返回的响应发送给客户端。 所以这件事情 var request = require('request'), helpers = require('./helpers.js'); //GET module.exports.fetch = function(req, res) { var options = helpers.buildAPIRequestOptions(req); request(options, function(err, response, body){ res.status(response.statusCode).send(body); }); }; 我正在编写unit testing,并希望模拟出来,并返回自己的回应,当传出的请求与这些function被解雇。 我遇到了超级烂摊子,并且写下了这样一个套餐: var app = require('./index.js'), request = require('supertest')(app), should = require('should'); //GET describe('GET requests', function(){ it('should do something', function(done){ request .get('/api/schemes') .expect(200, done) .end(function(err, res){ // console.log(res); […]

如何设置与主文件分开的快递路线?

我想按照下面的文件结构来分离我的rputes从主app.js我已经尝试过的api/user/后api返回404,任何想法如何通过使用下面的文件结构来解决这个问题? ./app.js var express = require('express'); var app = express(); var bodyParser = require('body-parser'); var db = require('./config/db'); var port = process.env.PORT || 8080; app.use(require('./app/routes')); app.use(bodyParser.json({ type: 'application/vnd.api+json' })); app.use(bodyParser.urlencoded({ extended: true })); app.use(methodOverride('X-HTTP-Method-Override')); app.use(express.static(__dirname + '/public')); function startServer() { server.listen(port, function() { console.log('Express server listening on %d, in %s mode', port, app.get('env')); }); } […]

适用于多部分Nodej的Bodyparser

所以我想从我的肢体语法分析器开始,并且我正在使用'multer' 我的多种select: var multer = require('multer'); var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, '/root/Unicon-Oauth/Resources/profile_images/') }, filename: function (req, file, cb) { cb(null, file.fieldname + '-' + Date.now()) } }); var pfImage = multer({storage:storage}); 在server.js的身体parsing器 app.use(bodyParser.urlencoded({extended:true,limit: '20MB',parameterLimit:10000})); app.use(bodyParser.json()); 我有这样的路线 router.post('/edit',[auth.isAuthenticated,pfImage.single('pImage')],actions.edit); function就是这样 function edit(req,res) { console.log(req.body); } 控制台日志输出: 大段引用 {“—— WebKitFormBoundaryGS8GEzQls8xRP6nt \ r […]

如何使用ES6在Koa.js中创build中间件

我最近在使用Express的背景下,首次在Koa.JS中构build了一个应用程序。 我正在使用Babel在运行时编译代码,同时开发给我一些ES6 +代码。 我在Koa中定义了一个中间件,这个中间件是我想要使用的,并存储在ctx对象中,稍后在我的应用程序中使用。 我不知道哪里出了问题,因为我可以在Express中做类似的工作(虽然不在ES6代码中)。 这是我的中间件: const Config = require('../../Config'); import jwt from 'jsonwebtoken'; const JWTController = () => { return { async generateToken(tokenVars) { const secretKey = Config.auth.secret; const claims = { sub: tokenVars.userid, iss: Config.auth.issuer, account: tokenVars.accountId, permissions: '' }; let token = await jwt.sign(claims, secretKey); return token; }, async decodeClaims(token) { const […]

连接资产uglify设置

我已经浪费了太多的时间在谷歌上了,而且对于连接资产还是一个新的东西。 所以我想使用构buildfunction,并连接资产连接和缩小我的JavaScript。 但是,我不能让我的variables名称。 uglify.js中有一个选项可以closures,但我不知道如何从这个级别访问这些选项。 connect-assets – > snockets – > uglify 这里是我的代码: app.use require('connect-assets')(src: "#{__dirname}/assets", build : true)

在Express.js中redirect后调用下一个中间件

我正在通过Express.js中间件的集成testing来驱动行为。 我遇到了一个有趣的情况,在应用程序背后的行为是不可预测的(不是由我,无论如何)。 作为一个简单的例子: var middlewareExample = function(req, res, next){ if(req.session){ refreshSession(req.session, function(err, data){ if(!err){ res.redirect('/error'); } }); next(); }else{ res.redirect('/authenticate'); } }; 问题在于next的redirect,因为它在内部函数和条件之外。 我不确定Express是如何将中间件/路由调用处理为next或res.redirect如果它们恰好发生在彼此之前或之后,如上所述。 手动testing没有发现任何奇怪的行为,超级模块也没有。 我想知道Express是否以及如何回应这种情况。 另外,supertest可以用来揭露任何潜在的不良行为。 另外,如果可以的话,我想听听别人用什么方法来testingNode / Express中间件。

通过Express中间件或通过构build系统预处理

通过中间件(使用快递)预处理静态资源是生产环境的一个好主意? 根据我的理解,中间件堆栈是按照每个请求的顺序运行的。 那不是说那个预处理中间会在每个请求之后重新生成一个静态资源(即some_styles.less – > some_styles.css)吗? 如果是这样,预先通过grunt.js等构build系统进行预处理并提供这些文件会更好吗? 我想最终呈现的CSS和JS连接到一个文件,并缩小。 另外,是否值得从仅包含静态内容的页面上的模板(如jade)预渲染html? 或者比它的价值更麻烦?

我怎样才能和express.static一起使用中间件?

我有一个nodejs应用程序,通过express.static服务于单个页面的应用程序。 这一切工作正常,但是当我尝试创build一个简单的中间件: app.use(function(req, res, next){ console.log('%s %s', req.method, req.url); next(); }); app.use(express.static(path.join(__dirname, 'client'))); 从客户端加载内容的任何尝试失败: TypeError: Object function (req, res, next){ console.log('%s %s', req.method, req.url); next(); } has no method 'concat' 如果在express.static调用之后使用中间件,则它工作正常 – 但不会调用静态内容。 我需要设置中间件,以便任何Flash消息(来自连接闪存)都可以作为cookie发送到静态内容。 有谁知道我可以如何使用中间件的所有内容,包括静态内容? 最后,我将服务两个文件夹,一个公共和一个私人(通过护照authentication)。

如何在路由器的app.js中调用express 4.0中间件function?

我有一个中间件function来做app.js(starter javascript)中的基本授权。 但其他JavaScript文件中有几个路由器文件。 我的问题是我如何在我的路由器中调用授权中间件function? 这是我的app.js: var basicAuth = require('basic-auth'); var auth = function (req, res, next) { function unauthorized(res) { res.set('WWW-Authenticate', 'Basic realm=Authorization Required'); return res.send(401); }; var user = basicAuth(req); if (!user || !user.name || !user.pass) { return unauthorized(res); }; if (user.name === 'foo' && user.pass === 'bar') { return next(); } else { […]

如何限制用户在Loopback中只访问他的组元素?

我试图在文档或networking上的任何地方find它,但我没有find。 我在问什么? 我正在为多个用户构build网站。 前端并不重要,后端的后端API正在Loopback中构build。 每个用户都会被分配到一些,我们将其命名为GROUP。 组内容将在子域上显示,但现在并不重要。 用户将是他们组的pipe理员。 我会有很多不同的模型,但是我将永远不得不保护用户访问不属于他的组的元素。 我应该怎么做? 我认为这将是一些中间件,但我不知道如何做到这一点。 当然,每个用户和每个元素都有字段“group_id”。