$ npm init
//注意:此选项直接默认entry point: (index.js);这是当前应用的入口文件。希望采用默认的 index.js 文件名,所以不需要更改,直接设为默认。
npm install express --save
//save参数,表示自动修改package.json文件,自动添加依赖项。
//引入express框架
var express = require('express');
//创建应用对象
var app = express();
//对所有 (/) URL 或 路由 返回 “Hello World!” 字符串
app.get('/', function (req, res) {
res.send('Hello World!');
});
//启动一个服务并监听从 3000端口进入的所有连接请求
app.listen(3000, function () {
console.log('服务器开启成功');
});
//通过 Express 应用生成器创建的应用一般都有如下目录结构:
.
├── app.js
├── bin
│ └── www
├── package.json
├── public
│ ├── images
│ ├── javascripts
│ └── stylesheets
│ └── style.css
├── routes
│ ├── index.js
│ └── users.js
└── views
├── error.jade
├── index.jade
└── layout.jade
7 directories, 9 files
app.get("/hello",function (req , res , next) {});
app.get("/hello",function (req , res , next) {});
app.get("/hello",function (req , res , next) {});
//===========================================
app.get("/hello",function (req , res , next) {},function (req , res , next) {},function (req , res , next) {});
路由的设置方式:
app.<method>(path,callback);
//比如:
app.get("/hello",function (req , res , next) {});
// GET 方法请求路由
app.get('/', function (req, res) {
res.send('GET request to the homepage');
});
// POST 方法请求路由
app.post('/', function (req, res) {
res.send('POST request to the homepage');
});
app.get('/example/b', function (req, res, next) {
console.log('通过路由发送内容');
next();
}, function (req, res) {
res.send('你好,我是hello路由返回的内容');
});
var router = express.Router();
router.get(...);
router.post(...);
router.all(...);
router.use(...);
app.use(router);
//示例代码
//在 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.get('/', function (req, res) {
res.send('root');
});
// 匹配 /about 路径的请求
app.get('/about', function (req, res) {
res.send('about');
});
//使用字符串模式的路由路径示例:
// 匹配 acd 和 abcd
app.get('/ab?cd', function(req, res) {
res.send('ab?cd');
});
// 匹配 abcd、abbcd、abbbcd等
app.get('/ab+cd', function(req, res) {
res.send('ab+cd');
});
//使用正则表达式的路由路径示例:
// 匹配任何路径中含有 a 的路径:
app.get(/a/, function(req, res) {
res.send('/a/');
});
Request 对象
常见属性:
req.query:获取URL的查询参数串
//访问请求:http://localhost:3010/hello?username=sunwukong&password=123123
控制台返回结果:{ username: 'sunwukong', password: '123123' }
req.route:获取当前匹配的路由
Response 对象
回调函数中的第三个参数,next;
app.get(path,callback1,callback2,callback3);
//或者
app.get(path,callback1);
app.get(path,callback2);
app.get(path,callback3);
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.json());
var app = express();
// 没有挂载路径的中间件,应用的每个请求都会执行该中间件
app.use(function (req, res, next) {
console.log('Time:', Date.now());
next();
});
// 挂载至 /user/:id 的中间件,任何指向 /user/:id 的请求都会执行它
app.use('/user/:id', function (req, res, next) {
console.log('Request Type:', req.method);
next();
});
// 路由和句柄函数(中间件系统),处理指向 /user/:id 的 GET 请求
app.get('/user/:id', function (req, res, next) {
res.send('USER');
});
var router = express.Router();
var app = express();
var router = express.Router();
// 没有挂载路径的中间件,通过该路由的每个请求都会执行该中间件
router.use(function (req, res, next) {
console.log('Time:', Date.now());
next();
});
// 一个中间件栈,显示任何指向 /user/:id 的 HTTP 请求的信息
router.use('/user/:id', function(req, res, next) {
console.log('Request URL:', req.originalUrl);
next();
}, function (req, res, next) {
console.log('Request Type:', req.method);
next();
});
// 一个中间件栈,处理指向 /user/:id 的 GET 请求
router.get('/user/:id', function (req, res, next) {
// 如果 user id 为 0, 跳到下一个路由
if (req.params.id == 0) next('route');
// 负责将控制权交给栈中下一个中间件
else next(); //
}, function (req, res, next) {
// 渲染常规页面
res.render('regular');
});
// 处理 /user/:id, 渲染一个特殊页面
router.get('/user/:id', function (req, res, next) {
console.log(req.params.id);
res.render('special');
});
// 将路由挂载至应用
app.use('/', router);
app.use(express.static('public'));
Ejs的使用:
需要在应用中进行如下设置才能让 Express 渲染模板文件:
views, 放模板文件的目录,比如: app.set('views', './views')
view engine, 模板引擎,比如: app.set('view engine', 'jade')
1、安装模板引擎 npm 软件包,安装Ejs:
npm install ejs --save
2、配置ejs
app.set("view engine" , "ejs");
app.set("views","views");
3、创建ejs模版
//在 views 目录下生成名为 test.ejs 的 ejs 模板文件,内容如下:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<table width="40%" border="1" align="center">
<tr>
<td>姓名</td>
<td>性别</td>
<td>年龄</td>
<td>住址</td>
<td>操作</td>
</tr>
<%
for(var i=0 ; i<arr.length ; i++){
%>
<tr>
<td><%=arr[i].name%></td>
<td><%=arr[i].gender%></td>
<td><%=arr[i].age%></td>
<td><%=arr[i].address%></td>
<td>
<a href="javascript:;">删除</a>
<a href="javascript:;">修改</a>
</td>
</tr>
<% } %>
</table>
</body>
</html>
4、使用ejs
var express = require("express");
var app = express();
/*
1.安装EJS
2.在express中来配置ejs
- 配置ejs为express的模板引擎
- 配置模板的存放目录
*/
//配置模版引擎
app.set("view engine" , "ejs");
app.set("views" , "views");
app.get("/testEJS",function (req , res) {
res.render("hello.ejs" , {username:"沙和尚"});});
app.get("/list",function (req , res) {
//创建一个数组
var arr = [
{
name:"孙悟空",
age:18,
gender:"男",
address:"花果山"
},
{
name:"沙和尚",
age:38,
gender:"男",
address:"流沙河"
},
{
name:"唐僧",
age:16,
gender:"男",
address:"女儿国"
},
{
name:"奔波霸",
age:48,
gender:"男",
address:"碧波潭"
},
{
name:"玉兔精",
age:14,
gender:"女",
address:"月亮之上"
}
];
res.render("test.ejs" , {arr:arr});});
app.listen(3000,function () {
console.log("OK");
});
EJS的语法:
向ejs中设置变量的方式: