一.express框架学习
一.创建express应用app
创建一个 Express 应用。express() 是一个由 express 模块导出的入口(top-level)函数。
var express = require('express');
var app = express();//app是express实例
二.内置方法
express.static(root, [options])
express.static 是 Express 内置的唯一一个中间件。是基于 serve-static 开发的,负责托管 Express 应用内的静态资源。
root 参数指的是静态资源文件所在的根目录。
options 对象是可选的,支持以下属性:
通过 Express 内置的 express.static 可以方便地托管静态文件,例如图片、CSS、JavaScript 文件等。
将静态资源文件所在的目录作为参数传递给 express.static 中间件就可以提供静态资源文件的访问了。例如,假设在 public 目录放置了图片、CSS 和 JavaScript 文件,你就可以:
app.use(express.static('public'));
http://localhost:3000/static/images/kitten.jpg
三基础应用
//创建一个入口app.js然后将下列代码复制进去
//创建一个应用
var express = require('express');
var app = express();
//他将对所有 (/) URL 或 路由 返回 “Hello World!” 字符串。对于其他所有路径全部返回 404 Not Found。
app.get('/', function (req, res) {//req(请求);res(返给前台)
res.send('Hello World!');
});
//上面的代码启动一个服务并监听从 3000 端口进入的所有连接请求
var server = app.listen(3000, function () {
var host = server.address().address;
var port = server.address().port;
console.log('Example app listening at http://%s:%s', host, port);
});
四.简单的express路由
a:路由路径和请求方法一起定义了请求的端点,它可以是字符串、字符串模式或者正则表达式。
每一个路由都可以有一个或者多个处理器函数,当匹配到路由时,这个/些函数将被执行
路由的定义的结构:app.METHOD(PATH, HANDLER)
解读:
app:express实例
method:http请求的方式
path:服务器端的路径
handler:路径匹配时的处理函数
// 对网站首页的访问返回 "Hello World!" 字样
app.get('/', function (req, res) {
res.send('Hello World!');
});
// 网站首页接受 POST 请求
app.post('/', function (req, res) {
res.send('Got a POST request');
});
// /user 节点接受 PUT 请求
app.put('/user', function (req, res) {
res.send('Got a PUT request at /user');
});
// /user 节点接受 DELETE 请求
app.delete('/user', function (req, res) {
res.send('Got a DELETE request at /user');
});
b:app.all()
app.all() 是一个特殊的路由方法,没有任何 HTTP 方法与其对应,它的作用是对于一个路径上的所有请求加载中间件。
在下面的例子中,来自 “/secret” 的请求,不管使用 GET、POST、PUT、DELETE 或其他任何 http 模块支持的 HTTP 请求,句柄都会得到执行。
app.all('/secret', function (req, res, next) {
console.log('Accessing the secret section ...');
next(); // pass control to the next handler
});
c:app.route()
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');
});
d:express.Router
可使用 express.Router 类创建模块化、可挂载的路由句柄。Router 实例是一个完整的中间件和路由系统,因此常称其为一个 “mini-app”。
//在 app 目录下创建名为 birds.js 的文件,内容如下:
var express = require('express');
var router = express.Router();
// 该路由使用的中间件
router.use(function timeLog(req, res, next) {
console.log('Time: ', Date.now());
next();
});
// 定义网站主页的路由
router.get('/', function(req, res) {
res.send('Birds home page');
});
// 定义 about 页面的路由
router.get('/about', function(req, res) {
res.send('About birds');
});
module.exports = router;
然后在应用中加载路由模块:
var birds = require('./birds');
...
app.use('/birds', birds);
五.没有任何匹配的处理
app.use(function(req, res, next) {
res.status(404).send('Sorry cant find that!');
});
六.中间件
中间件(Middleware) 是一个函数,它可以访问请求对象(request object (req)), 响应对象(response object (res)), 和web应用中处于请求-响应循环流程中的中间件,一般被命名为next的变量。
**应用级中间件**
应用级中间件绑定到app对象,使用app.use()和app.METHOD(),其中,METHOD 是需要处理的 HTTP 请求的方法,例如 GET,PUT,POST 等等,全部小写。
**路由中间件**
路由级中间件和应用级中间件一样,只是它绑定的对象为 express.Router()。
七.调试+错误处理
八.express设置代理
当在代理服务器之后运行 Express 时,请将应用变量 trust proxy 设置(使用 app.set())为下述列表中的一项
九.数据库集成
添加数据库
为 Express 应用添加连接数据库的能力,只需要加载相应数据库的 Node.js 驱动即可
1.安装加载数据库驱动:npm install mysql
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'dbuser',
password : 's3kreee7'
});
connection.connect();
connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
if (err) throw err;
console.log('The solution is: ', rows[0].solution);
});
connection.end();