- 创建服务器
var express = require('express') var app = express() app.listen(3000, () => console.log('Example app listening on port 3000!'))
- 常用四种路由
app.get('/', function(req, res) { res.send('hello world') }) app.post('/', function(req, res) { res.send('Got a POST request') }) app.put('/user', function(req, res) { res.send('Got a PUT request at /user') }) app.delete('/user', function(req, res) { res.send('Got a DELETE request at /user') })
- 传参数 parameters
app.get('/users/:userId/books/:bookId', function(req, res) { res.send(req.params) })
- 处理器 handlers,多个事件顺序执行
var cb0 = function(req, res, next) { console.log('CB0') next() } var cb1 = function(req, res, next) { console.log('CB1') next() } var cb2 = function(req, res) { res.send('Hello from C!') } app.get('/example/c', [cb0, cb1, cb2]) app.get('/example/d', [ cb0, cb1 ], function(req, res, next) { console.log('the response will be sent by the next function ...') next() }, function(req, res) { res.send('Hello from D!') })
- 中间件 function,requestTime 会传递到下文执行的 req 中
var requestTime = function(req, res, next) { req.requestTime = Date.now() next() } app.use(requestTime) app.get('/req', function(req, res) { var responseText = 'Hello World!<br>' responseText += '<small>Requested at: ' + req.requestTime + '</small>' res.send(responseText) })
- 事件跳转
app.get('/user/:id', function(req, res, next) { // if user ID == 0, 跳转到 next route 'special' if (req.params.id === '0') next('route') // 否则执行这个栈中的下一个中间件函数'regular' else next() }, function(req, res, next) { // send a regular response res.send('regular') }) // handler for the /user/:id path, which sends a special response app.get('/user/:id', function(req, res, next) { res.send('special') })
- 展示 html 页面
res.sendFile(__dirname + "/public/index.html");
- 展示静态文件目录
public 文件夹下的内容
app.use(express.static('public')) app.use('/static', express.static('public'))
- 展示 json
app.get("/json", function(req, res) { res.json({"message": "Hello World"}); });
- 错误处理
app.get("/err", function(req, res) { throw new Error("BROKEN"); // Express will catch this on its own. }); app.get("/not", function(req, res, next) { fs.readFile("/file-does-not-exist", function(err, data) { if (err) { next(err); // Pass errors to Express. } else { res.send(data); } }); });
- 404
app.use(function(req, res, next) { res.status(404).send("Sorry can't find that!") })
- 500
app.use(function(err, req, res, next) { console.error(err.stack) res.status(500).send('Something broke!') })
- 启动服务器
node index.js
debug 模式启动
$ DEBUG=express:* node index.js
On Windows
> set DEBUG=express:* & node index.js