Tag: 中间件

谁在Express中间件中提供next()函数?

我很困惑next()如何在Node.js和Express中间件中工作。 还有一些关于中间件工作的其他问题, 例如这里 ,但我正在寻找一个不同的答案。 困扰我的主要问题是谁在提供next()函数? 例如,在我的标准生成express应用程序,我给这个代码: // catch 404 and forward to error handler app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); }); 但是谁调用了这个函数,它提供的next()的本质是什么? 我怎么知道next()什么样的? 我不知道next()是做什么的。

在Sails.js中使用快递中间件来提供静态文件

我在sails 0.11.0上使用快速中间件时遇到了麻烦。 我在http.js文件中尝试了以下内容。 module.exports.http = { customMiddleware: function (app) { console.log("middleware"); app.use('/test', express.static('****/****/*****/testProject/api/controllers' + '/public/')); } }; 但它不起作用,我错过了一些东西。

停止KOA中的中间件pipe道执行

我想问一下在KOA中是否有办法停止执行中间件pipe道? 在下面的例子中,我有一个中间件,可以validation某些东西。 当validation失败时,我如何重新编码中间件以停止执行? var koa = require('koa'); var router = require('koa-router')(); var app = koa(); app.use(router.routes()); // middleware app.use(function *(next){ var valid = false; if (!valid){ console.log('entered validation') this.body = "error" return this.body; // how to stop the execution in here } }); // route router.get('/', function *(next){ yield next; this.body = "should not enter […]

任何方式有条件地跳过中间件与快递next()?

所以例如 – //Functions var validationCheck = function(req, res, next){ if(req.session.userId && req.session.token) next('validationCatch') //Is this possible to skip middleware if not needed? else next() } var getUserId = function(req, res, next){ req.session.userId = DB.getUserId next() } var getToken = function(req, res, next){ req.session.token = DB.getToken next() } //a catcher function to direct to next function […]

在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中间件。