//app.js var express = require('express'); var app = express(); app.get('/:id', function(req, res, next){ console.log(req.params.id); //123456 res.end(); }); app.listen(3000);
这样不论我在根路径后输入的是什么
都会被解析为req.params.id
res.send()
res.send用于向客户端响应信息 并且它的强大之处在于可以智能的处理我们传递的不同类型参数
app.get('https://www.jb51.net/', function(req, res, next){ res.send('express'); });
当参数为字符串,会将响应头Content-Type默认设置为text/html
也就是解析为html呈现在我们的页面上
app.get('https://www.jb51.net/', function(req, res){ res.send(200); });
当参数为数字,会自动帮我们设置响应体(状态码…)
app.get('https://www.jb51.net/', function(req, res){ res.send([1, 2, 3]); });
当参数为数组或对象,它会响应一个JSON
res.redirect()
使用这个方法可以让我们对网页重定向
比如使用绝对url跳转到不同的域名
app.get('https://www.jb51.net/', function(req, res){ res.redirect('http://www.baidu.com'); });
res.redirect()默认响应状态码是302
可以更改这个状态码作为res.redirect()的第一个参数
//app.js var express = require('express'); var app = express(); app.get('https://www.jb51.net/', function(req, res){ res.redirect(302, 'demo'); }); app.get('/demo', function(req, res){ res.end(); }); app.listen(3000);
当在url地址栏中输入:3000
页面就会重定向到:3000/demo
静态资源
静态资源就是指我们在开发中用到的css、js、img等等
它们需要存放到一个静态资源目录
当浏览器发出了一个非HTML文件请求
服务器就会从这个静态资源目录下去查找文件
我们一般在根目录下创建一个public文件来存储
并在public中创建stylesheets、javascripts、images等文件夹
用来存储特定类型的资源
指定静态资源目录的方法上面已经提到了
var path = require('path'); app.use(express.static(path.join(__dirname, 'public')));
比如说我们的html中有这样的代码
<link href="https://www.jb51.net/javascripts/jquery.js" media="screen">
那么客户端运行发出请求
服务器就会在public的javascripts文件夹下找到jQuery.js静态资源
模板引擎
express框架默认是ejs和jade渲染模板
这里以jade为例
使用时肯定要下载
npm install jade --save
再通过app.set()指定查找模板文件的目录(类似于静态资源)
并指定模板文件后缀为jade
app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade');
(如果不使用模板而使用原生html,app.set('view engine', 'html');)
如果我们想要访问模板该怎么做呢?
很简单,只需要一个方法res.render()
现在我写了一个简单的jade模板(关于jade语法超出本文讨论范围)
//views/index.jade doctype html html head title= title link(rel='stylesheet', href='https://www.jb51.net/stylesheets/style.css') body h1= title p= content
通过res.render渲染
//app.js var express = require('express'); var path = require('path'); var app = express(); app.use(express.static(path.join(__dirname, 'public'))); app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade'); app.get('https://www.jb51.net/', function(req, res){ res.render('index', { title: 'Express', content: 'this is an example' }); }); app.listen(3000);
res.render()
res.render(view[, datas][, callback])
用于对网页模板进行渲染
第一个参数是要渲染的模板名称
第二个参数是传递给模板的变量,以对象形式存储,没有可省略
第三个参数是渲染后回调函数,可以省略
路由
路由的意思就是根据不同的路径,来指定不同的处理方法
我们一般把不同的路由封装进不同的模块
首先在根目录下创建一个文件夹routes存储路由
现在我在routes文件夹下创建俩个路由文件index.js和users.js
修改app.js