diff --git a/types/express/express-tests.ts b/types/express/express-tests.ts index 62e9fc7124..0c1081b49b 100644 --- a/types/express/express-tests.ts +++ b/types/express/express-tests.ts @@ -1,109 +1,122 @@ import * as express from 'express'; namespace express_tests { - - var app = express(); + const app = express(); app.engine('jade', require('jade').__express); app.engine('html', require('ejs').renderFile); express.static.mime.define({ - 'application/fx': ['fx'] + 'application/fx': ['fx'] }); app.use('/static', express.static(__dirname + '/public')); // simple logger - app.use(function(req, res, next) { - console.log('%s %s', req.method, req.url); - next(); + app.use((req, res, next) => { + console.log('%s %s', req.method, req.url); + next(); }); - app.use(function(err: any, req: express.Request, res: express.Response, next: express.NextFunction) { - console.error(err); - next(err); + app.use((err: any, req: express.Request, res: express.Response, next: express.NextFunction) => { + console.error(err); + next(err); }); + app.get('/', (req, res) => { + res.send('hello world'); + }); - app.get('/', function(req, res) { - res.send('hello world'); + // Accept json app-wide or on one endpoint. + app.use(express.json({ limit: "200kb" })); + app.post('/echo', express.json(), (req, res) => { + res.json(req.body); + }); + + // Accept urlencoded app-wide or on one endpoint. + app.use(express.urlencoded({ + extended: false, + parameterLimit: 16 + })); + app.post('/search', express.urlencoded(), (req, res) => { + res.json(Object.keys(req.body)); }); const router = express.Router({ caseSensitive: true, mergeParams: true, strict: true }); - const pathStr: string = 'test'; + const pathStr = 'test'; const pathRE: RegExp = /test/; const path = true ? pathStr : pathRE; router.get(path); - router.put(path) + router.put(path); router.post(path); router.delete(path); router.get(pathStr); - router.put(pathStr) + router.put(pathStr); router.post(pathStr); router.delete(pathStr); router.get(pathRE); - router.put(pathRE) + router.put(pathRE); router.post(pathRE); router.delete(pathRE); - router.use((req, res, next) => { next(); }) + router.use((req, res, next) => { next(); }); router.route('/users') - .get((req, res, next) => { - let types: string[] = req.accepts(); - let type: string | false = req.accepts('json'); - type = req.accepts(['json', 'text']); - type = req.accepts('json', 'text'); + .get((req, res, next) => { + const types: string[] = req.accepts(); + let type: string | false = req.accepts('json'); + type = req.accepts(['json', 'text']); + type = req.accepts('json', 'text'); - let charsets: string[] = req.acceptsCharsets(); - let charset: string | false = req.acceptsCharsets('utf-8'); - charset = req.acceptsCharsets(['utf-8', 'utf-16']); - charset = req.acceptsCharsets('utf-8', 'utf-16'); + const charsets: string[] = req.acceptsCharsets(); + let charset: string | false = req.acceptsCharsets('utf-8'); + charset = req.acceptsCharsets(['utf-8', 'utf-16']); + charset = req.acceptsCharsets('utf-8', 'utf-16'); - let encodings: string[] = req.acceptsEncodings(); - let encoding: string | false = req.acceptsEncodings('gzip'); - encoding = req.acceptsEncodings(['gzip', 'deflate']); - encoding = req.acceptsEncodings('gzip', 'deflate'); + const encodings: string[] = req.acceptsEncodings(); + let encoding: string | false = req.acceptsEncodings('gzip'); + encoding = req.acceptsEncodings(['gzip', 'deflate']); + encoding = req.acceptsEncodings('gzip', 'deflate'); - let languages: string[] = req.acceptsLanguages(); - let language: string | false = req.acceptsLanguages('en'); - language = req.acceptsLanguages(['en', 'ja']); - language = req.acceptsLanguages('en', 'ja'); + const languages: string[] = req.acceptsLanguages(); + let language: string | false = req.acceptsLanguages('en'); + language = req.acceptsLanguages(['en', 'ja']); + language = req.acceptsLanguages('en', 'ja'); - // downcasting - req.get('set-cookie') as undefined; - req.get('set-cookie') as string[]; - const setCookieHeader1 = req.get('set-cookie'); - if (setCookieHeader1 !== undefined) { - const setCookieHeader2: string[] = setCookieHeader1; - } - req.get('header') as undefined; - req.get('header') as string; - const header1 = req.get('header'); - if (header1 !== undefined) { - const header2: string = header1; - } + // downcasting + req.get('set-cookie') as undefined; + req.get('set-cookie') as string[]; + const setCookieHeader1 = req.get('set-cookie'); + if (setCookieHeader1 !== undefined) { + const setCookieHeader2: string[] = setCookieHeader1; + } + req.get('header') as undefined; + req.get('header') as string; + const header1 = req.get('header'); + if (header1 !== undefined) { + const header2: string = header1; + } - // upcasting - const setCookieHeader3: string[] | undefined = req.get('set-cookie'); - const header3: string | undefined = req.header('header'); + // upcasting + const setCookieHeader3: string[] | undefined = req.get('set-cookie'); + const header3: string | undefined = req.header('header'); - req.headers.existingHeader as string; - req.headers.nonExistingHeader as any as undefined; + req.headers.existingHeader as string; + req.headers.nonExistingHeader as any as undefined; - res.send(req.query['token']); - }); + res.send(req.query['token']); + }); - router.get('/user/:id', function(req, res, next) { - if (req.params.id == 0) next('route'); - else next(); - }, function(req, res, next) { - res.render('regular'); + router.get('/user/:id', (req, res, next) => { + if (Number(req.params.id) === 0) next('route'); + else next(); + }, (req, res, next) => { + res.render('regular'); }); app.use((req, res, next) => { - // hacky trick, router is just a handler - router(req, res, next); + // hacky trick, router is just a handler + router(req, res, next); }); app.use(router); @@ -120,9 +133,7 @@ namespace express_tests { ***************************/ import * as http from 'http'; - namespace node_tests { - { // http.createServer can take express application const app: express.Application = express(); diff --git a/types/express/index.d.ts b/types/express/index.d.ts index e127d6d5ed..59f60e92df 100644 --- a/types/express/index.d.ts +++ b/types/express/index.d.ts @@ -14,6 +14,7 @@ /// /// +import * as bodyParser from "body-parser"; import * as serveStatic from "serve-static"; import * as core from "express-serve-static-core"; @@ -23,12 +24,23 @@ import * as core from "express-serve-static-core"; declare function e(): core.Express; declare namespace e { + /** + * This is a built-in middleware function in Express. It parses incoming requests with JSON payloads and is based on body-parser. + * @since 4.16.0 + */ + var json: typeof bodyParser.json; /** - * This is the only built-in middleware function in Express. It serves static files and is based on serve-static. + * This is a built-in middleware function in Express. It serves static files and is based on serve-static. */ var static: typeof serveStatic; + /** + * This is a built-in middleware function in Express. It parses incoming requests with urlencoded payloads and is based on body-parser. + * @since 4.16.0 + */ + var urlencoded: typeof bodyParser.urlencoded; + export function Router(options?: RouterOptions): core.Router; interface RouterOptions { @@ -60,7 +72,7 @@ declare namespace e { interface Handler extends core.Handler { } interface IRoute extends core.IRoute { } interface IRouter extends core.IRouter { } - interface IRouterHandler extends core.IRouterHandler { } + interface IRouterHandler extends core.IRouterHandler { } interface IRouterMatcher extends core.IRouterMatcher { } interface MediaType extends core.MediaType { } interface NextFunction extends core.NextFunction { } diff --git a/types/express/tslint.json b/types/express/tslint.json new file mode 100644 index 0000000000..7b39baf22b --- /dev/null +++ b/types/express/tslint.json @@ -0,0 +1,12 @@ +{ + "extends": "dtslint/dt.json", + "rules": { + // Not sure if changing these won't break apps. + "interface-name": false, + "no-empty-interface": false, + "no-namespace": false, + "no-reference-import": false, + "no-var-keyword": false, + "strict-export-declare-modifiers": false + } +} \ No newline at end of file