Лекция 05
npm install express
const http = require('http');
const server = http.createServer((req, res) => {
res.end('Hello world!');
});
server.listen(3000, '127.0.0.1', () => {
console.log('Running');
});
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(3000, function () {
console.log('Running');
});
node index.js
app.use(express.static('public'));
app.use(express.static('files'));
app.use('/static', express.static('public'));
app.METHOD(PATH, HANDLER)
app.get('/', (req, res) => {
res.send('GET');
});
app.post('/', (req, res) => {
res.send('POST');
});
/*
get, post, put, head, delete, options, trace,
copy, lock, mkcol, move, purge, propfind,
proppatch, unlock, report, mkactivity,
checkout, merge, m-search, notify, subscribe,
unsubscribe, patch, search, connect
*/
app['m-search']('/', (req, res) => {
...
});
app.all('/', (req, res) => {
console.log('access to the root');
});
app.get('/', (req, res) => {
res.send('root');
});
app.get('/about', (req, res) => {
res.send('about');
});
// acd, abcd
app.get('/ab?cd', (req, res) => {
res.send('ab?cd');
});
// abcd, abbcd, abbbcd, ...
app.get('/ab+cd', (req, res) => {
res.send('ab+cd');
});
// abcd, abxcd, abRANDOMcd, ab123cd, ...
app.get('/ab*cd', (req, res) => {
res.send('ab*cd');
});
// abe and abcde
app.get('/ab(cd)?e', (req, res) => {
res.send('ab(cd)?e');
});
// все пути содержащие `a`
app.get(/a/, (req, res) => {
res.send('/a/');
});
// все пути заканчивающиеся на `fly`
app.get(/.*fly$/, (req, res) => {
res.send('/.*fly$/');
});
const route = '/users/:userId/books/:bookId';
app.get(route, (req, res) => {
res.send(req.params);
});
Request URL:
http://localhost:3000/users/34/books/8989
req.params:
{ "userId": "34", "bookId": "8989" }
const route = '/flights/:from-:to';
app.get(route, (req, res) => {
res.send(req.params);
});
Request URL:
http://localhost:3000/flights/LAX-SFO
req.params:
{ "from": "LAX", "to": "SFO" }
app.get('/', (req, res) => {
console.log('Hello World!');
});
app.get('/', (req, res, next) => {
console.log('Hello World!');
next();
});
app.get('/', (req, res) => {
res.send('Hello World!');
});
const log = (req, res, next) => {
console.log('Hello World!');
next();
};
const send = (req, res) => {
res.send('Hello World!');
};
app.get('/', log, send);
const log = (req, res, next) => {
console.log('Hello World!');
next();
};
const send = (req, res) => {
res.send('Hello World!');
};
app.get('/', [log, send]);
const log = (req, res, next) => {
console.log('Hello World!');
next();
};
const send = (req, res) => {
res.send('Hello World!');
};
app.get('/', [log, log], send);
app.route('/book')
.get(function(req, res) {
res.send('Get a random book');
})
.post(function(req, res) {
res.send('Add a book');
})
.put(function(req, res) {
res.send('Update the book');
});
app.get('/', (req, res, next) => {
console.log('Hello World!');
next();
});
Может:
Обязан:
app.use(express.static('public'));
const logger = function (req, res, next) {
console.log(req.url);
next();
};
app.use(logger);
app.use(logger);
app.get('/', (req, res) => res.send('Hello'));
app.get('/', (req, res) => res.send('Hello'));
app.use(logger);
app.use('/api/*', logger);
app.post('/api/news', parse);
app.post('/api/news', validate);
app.post('/api/news', writeToDb);
app.post('/api/news', respond);
app.use(function (req, res, next) {
console.log('Time:', Date.now());
next();
});
const newsRouter = express.Router();
newsRouter.post('/', parse);
newsRouter.post('/', validate);
newsRouter.post('/', writeToDb);
newsRouter.post('/', respond);
// монтирование роутера
app.use('/api/news', newsRouter);
api.use('/news', newsRouter);
api.use('/user', userRouter);
app.use('/api', api);
// 4 входных параметра
app.use(function(err, req, res, next) {
console.error(err.stack);
res.status(500).send('Something broke!');
});
// всегда последние
app.use(express.static('public'));
app.use(logger);
app.use('/api', api);
app.use(errorHandler);
// 1+
app.use(logErrors);
app.use(clientErrorHandler);
app.use(errorHandler);
const parser = (req, res, next) => {
req.params.userId
= parseInt(req.params.userId);
next();
};
const validator = (req, res, next) => {
if (isNaN(req.params.userId)) {
next({
message: 'User id should be integer'
});
}
else next();
};
const logError = (err, req, res, next) => {
console.log(err.message);
next(err);
};
const errorHandler = (err, req, res, next) => {
res.send(err.message);
};
app.use('/news', () => {
throw new Error('stack overflow!');
});
app.use('/api/*', (err, req, res, next) => {
...
});
const options = {
dotfiles: 'ignore',
etag: false,
extensions: ['htm', 'html'],
fallthrough: true,
index: false,
maxAge: '1h',
redirect: false,
setHeaders: function (res, path, stat) {
res.set('x-timestamp', Date.now());
}
}
app.use(express.static('public', options));
// dotfiles: 'ignore'
allow
deny - 403
ignore - 404 | default
.gitignore
.idea
// etag: false
ETag: "686897696a7c876b7e"
If-None-Match: "686897696a7c876b7e"
// extensions: ['htm', 'html']
// fallthrough: true
app.use(express.static('public'));
app.use(express.static('files'));
// index: false
// maxAge: '1h'
Cache-Control: max-age=3600
// redirect: false
/*
setHeaders: function (res, path, stat) {
res.set('x-timestamp', Date.now());
}
*/
npm install cookie-parser
const cookieParser = require('cookie-parser');
// req.cookies
app.use(cookieParser());
npm install body-parser
const bodyParser = require('body-parser');
// req.body
app.use(bodyParser.json())