Node.js基础入门第十天

经过前面九天的学习,对Node.js开发有了一个初步的认识,今天继续学习Node.js后端开发框架Express相关内容,仅供学习分享使用,如有不足之处,还请指正。

响应对象(res)

1. 什么是响应对象?

响应对象(res)是指服务器端向客户端响应数据的对象,包含了所有要响应的内容。Express的响应对象是对Node.js原始响应对象的封装。

2. 响应对象常见方法

响应对象的常见方法,如下所示:

  1. res.send(data)方法,用于向客户端返回任意类型的数据。但是不能直接返回数字,否则会被当成状态码,如果一定要返回,则需要加引号。
  2. res.json()方法,向客户端返回json数据,且会设置返回的Header为的application/json。
  3. res.render()方法,渲染模板,用于将数据填充到模块中。
  4. res.redirect()方法,实现服务端跳转。
  5. res.cookie(),设置cookie。
  6. res.set(),设置响应头

3. res.send方法

返回Json格式的数据,如下所示:

router.get('/', function(req, res, next) {
    var data={"name":"小六公子","age":29};
    res.send(data);
});

在浏览器中打开如下所示:

如果要单独返回一个数字,需要加引号,转换成字符串,否则会被当成状态码,如下所示:

router.get('/', function(req, res, next) {
    //res.send(10);//错误
    res.send("10");//正确
});

返回错误示例,截图如下所示:

 注意:res.send方法,在一个请求内,是能生效一次,如果连续写多个,则会丢失且报错。如下所示:

router.get('/', function(req, res, next) {
    res.send("123");
    res.send("456");//此内容不会输出,且后台会报错
});

在浏览器打开及后台错误,如下所示:

 针对这种需要需要发送多次数据的情况,可以先将数据进行拼接组装,再统一发送。

4. res.json方法

Express提供了专门的返回json数据的方法,在返回响应数据时,同时设置响应头。如下所示:

router.get('/', function(req, res, next) {
    var data={"name":"小六公子","age":29};
    res.json(data);
});

在浏览器中打开如下所示:

5.  res.render方法

用户读取模板,并渲染数据到模板中,然后再发送到客户端。如下所示:

index.ejs模块文件如下所示:

<!DOCTYPE html>
<html>
  <head>
    <title><%= title %></title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
    <h1><%= title %></h1>
    <p>Welcome to <%= title %></p>
    <p>I am <%= name %></p>
  </body>
</html>

渲染如下所示:

router.get('/', function(req, res, next) {
    res.render('index', { title: 'Express' ,name:"小六公子"});
});

在浏览器中运行,如下所示:

6. res.redirect方法

此方法可以实现页面的后端直接跳转,且没有任何提示,如下所示:

router.get('/', function(req, res, next) {
    res.redirect("https://www.baidu.com");//跳转
});

注意:页面跳转后,浏览器中的网址也会变成跳转后的新网址。

7. 链式调用

响应对象的方法可以链式调用,如下所示:

router.get('/', function(req, res, next) {
    res.status(200).send("小六呀");//先设置状态码,再输出内容
});

请求对象(req)

请求对象包含了一次请求中的所有数据(如:请求头,请求体等)。

1. 获取GET方式参数

在Express中,获取GET方式传递的参数非常简便,如下所示:

router.get('/', function(req, res, next) {
    //请求格式:req.query.参数名
    var name = req.query.name;
    var age = req.query.age;
    res.send("姓名:"+name+",年龄:"+age);
});

在命令行中运行程序,并在浏览器中打开,如下所示:

2. 获取POST方式参数

POST方式通过【req.body.参数名】 的方式进行获取。POST方式一般采用form表单的方式实现。

创建一个静态网页login.html,如下所示:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>登录</title>
    </head>
    <body>
        <form method="post" action="/login.html">
            姓名:<input type="text" name="name" /> <br />
            年龄:<input type="text" name="age" /> <br />
            <input type="submit" value="登录" />
        </form>
    </body>
</html>

在路由文件中,获取参数,并进行返回,如下所示:

router.post('/login.html',function(req,res,next){
    var name = req.body.name;
    var age = req.body.age;
    res.send("【POST方式】姓名:"+name+",年龄:"+age);
});

在浏览器中打开,如下所示:

注意:第一次打开form表单是GET方式,第二次响应是POST方式,所以在路由中设置的POST方式响应页面。在控制台窗口日志如下所示:

3. 参数匹配模式

地址栏中的参数还可以通过参数匹配的方式进行获取。匹配地址通过【冒号参数名】的方式,然后通过【req.params.参数名】进行获取。如下所示:

router.get('/list/:id/:name', function(req, res, next) {
    var id = req.params.id;
    var name = req.params.name;
    res.send("传递的参数为id:"+id+",name:"+name);
});

然后在浏览器打开,如下所示:

中间件

Express是一个自身功能极简,完全是由路由和中间件构成的一个web开发框架,从本质上来说,一个Express的应用就是在调用各种中间件。

在Node.js中,中间件本质是一个函数,它可以访问请求对象,响应对象和next尾函数。如果当前中间件没有终结请求-响应循环,则必须调用next方法将控制权交给下一个中间件,否则请求会挂起。

如404时,调用创建错误方法,如下所示:

app.use(function(req, res, next) {
  next(createError(404));
});

备注

走马川行奉送出师西征 / 走马川行奉送封大夫出师西征

【作者】岑参 【朝代】唐

君不见走马川行雪海边,平沙莽莽黄入天。

轮台九月风夜吼,一川碎石大如斗,随风满地石乱走。

匈奴草黄马正肥,金山西见烟尘飞,汉家大将西出师。

将军金甲夜不脱,半夜军行戈相拨,风头如刀面如割。

马毛带雪汗气蒸,五花连钱旋作冰,幕中草檄砚水凝。

虏骑闻之应胆慑,料知短兵不敢接,车师西门伫献捷。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
目 录 第1章 Node.js简介 1 1.1 Node.js是什么 2 1.2 Node.js能做什么 3 1.3 异步式I/O与事件驱动 4 1.4 Node.js的性能 5 1.4.1 Node.js架构简介 5 1.4.2 Node.js与PHP+Nginx 6 1.5 JavaScript简史 6 1.5.1 Netscape与LiveScript 7 1.5.2 Java与Javascript 7 1.5.3 微软的加入——JScript 8 1.5.4 标准化——ECMAScript 8 1.5.5 浏览器兼容性问题 9 1.5.6 引擎效率革命和JavaScript的未来 9 1.6 CommonJS 10 1.6.1 服务端JavaScript的重生 10 1.6.2 CommonJS规范与实现 11 1.7 参考资料 12 第2章 安装和配置Node.js 13 2.1 安装前的准备 14 2.2 快速安装 14 2.2.1 Microsoft Windows系统上安装Node.js 14 2.2.2 Linux发行版上安装Node.js 16 2.2.3 Mac OS X上安装Node.js 16 2.3 编译源代码 17 2.3.1 在POSIX系统中编译 17 2.3.2 在Windows系统中编译 18 2.4 安装Node包管理器 18 2.5 安装多版本管理器 19 2.6 参考资料 21 第3章 Node.js快速入门 23 3.1 开始用 Node.js编程 24 3.1.1 Hello World 24 3.1.2 Node.js命令行工具 25 3.1.3 建立HTTP服务器 26 3.2 异步式I/O与事件式编程 29 3.2.1 阻塞与线程 29 3.2.2 回调函数 31 3.2.3 事件 33 3.3 模块和包 34 3.3.1 什么是模块 35 3.3.2 创建及加载模块 35 3.3.3 创建包 38 3.3.4 Node.js包管理器 41 3.4 调试 45 3.4.1 命令行调试 45 3.4.2 远程调试 47 3.4.3 使用Eclipse调试Node.js 48 3.4.4 使用node-inspector调试Node.js 54 3.5 参考资料 55 第4章 Node.js核心模块 57 4.1 全局对象 58 4.1.1 全局对象与全局变量 58 4.1.2 process 58 4.1.3 console 60 4.2 常用工具util 61 4.2.1 util.inherits 61 4.2.2 util.inspect 62 4.3 事件驱动events 63 4.3.1 事件发射器 64 4.3.2 error事件 65 4.3.3 继承EventEmitter 65 4.4 文件系统fs 65 4.4.1 fs.readFile 66 4.4.2 fs.readFileSync 67 4.4.3 fs.open 67 4.4.4 fs.read 68 4.5 HTTP服务器与客户端 70 4.5.1 HTTP服务器 70 4.5.2 HTTP客户端 74 4.6 参考资料 77 第5章 使用Node.js进行Web开发 79 5.1 准备工作 80 5.1.1 使用http模块 82 5.1.2 Express框架 83 5.2 快速开始 84 5.2.1 安装Express 84 5.2.2 建立工程 85 5.2.3 启动服务器 86 5.2.4 工程的结构 87 5.3 路由控制 89 5.3.1 工作原理 89 5.3.2 创建路由规则 92 5.3.3 路径匹配 93 5.3.4 REST风格的路由规则 94 5.3.5 控制权转移 95 5.4 模板引擎 97 5.4.1 什么是模板引擎 97 5.4.2 使用模板引擎 98 5.4.3 页面布局 99 5.4.4 片段视图 100 5.4.5 视图助手 100 5.5 建立微博网站 102 5.5.1 功能分析 102 5.5.2 路由规划 102 5.5.3 界面设计 103 5.5.4 使用Bootstrap 104 5.6 用户注册和登录 107 5.6.1 访问数据库 107 5.6.2 会话支持 110 5.6.3 注册和登入 111 5.6.4 页面权限控制 120 5.7 发表微博 123 5.7.1 微博模型 123 5.7.2 发表微博 125 5.7.3 用户页面 126 5.7.4 首页 127 5.7.5 下一步 129 5.8 参考资料 129 第6章 Node.js进阶话题 131 6.1 模块加载机制 132 6.1.1 模块的类型 132 6.1.2 按路径加载模块 132 6.1.3 通过查找node_modules目录加载模块 133 6.1.4 加载缓存 134 6.1.5 加载顺序 134 6.2 控制流 135 6.2.1 循环的陷阱 135 6.2.2 解决控制流难题 137 6.3 Node.js应用部署 138 6.3.1 日志功能 138 6.3.2 使用cluster模块 140 6.3.3 启动脚本 142 6.3.4 共享80端口 143 6.4 Node.js不是银弹 144 6.5 参考资料 146 附录A JavaScript的高级特性 147 附录B Node.js编程规范 167
目 录 第1章 Node.js简介 1 1.1 Node.js是什么 2 1.2 Node.js能做什么 3 1.3 异步式I/O与事件驱动 4 1.4 Node.js的性能 5 1.4.1 Node.js架构简介 5 1.4.2 Node.js与PHP+Nginx 6 1.5 JavaScript简史 6 1.5.1 Netscape与LiveScript 7 1.5.2 Java与Javascript 7 1.5.3 微软的加入——JScript 8 1.5.4 标准化——ECMAScript 8 1.5.5 浏览器兼容性问题 9 1.5.6 引擎效率革命和JavaScript的未来 9 1.6 CommonJS 10 1.6.1 服务端JavaScript的重生 10 1.6.2 CommonJS规范与实现 11 1.7 参考资料 12 第2章 安装和配置Node.js 13 2.1 安装前的准备 14 2.2 快速安装 14 2.2.1 Microsoft Windows系统上安装Node.js 14 2.2.2 Linux发行版上安装Node.js 16 2.2.3 Mac OS X上安装Node.js 16 2.3 编译源代码 17 2.3.1 在POSIX系统中编译 17 2.3.2 在Windows系统中编译 18 2.4 安装Node包管理器 18 2.5 安装多版本管理器 19 2.6 参考资料 21 第3章 Node.js快速入门 23 3.1 开始用 Node.js编程 24 3.1.1 Hello World 24 3.1.2 Node.js命令行工具 25 3.1.3 建立HTTP服务器 26 3.2 异步式I/O与事件式编程 29 3.2.1 阻塞与线程 29 3.2.2 回调函数 31 3.2.3 事件 33 3.3 模块和包 34 3.3.1 什么是模块 35 3.3.2 创建及加载模块 35 3.3.3 创建包 38 3.3.4 Node.js包管理器 41 3.4 调试 45 3.4.1 命令行调试 45 3.4.2 远程调试 47 3.4.3 使用Eclipse调试Node.js 48 3.4.4 使用node-inspector调试Node.js 54 3.5 参考资料 55 第4章 Node.js核心模块 57 4.1 全局对象 58 4.1.1 全局对象与全局变量 58 4.1.2 process 58 4.1.3 console 60 4.2 常用工具util 61 4.2.1 util.inherits 61 4.2.2 util.inspect 62 4.3 事件驱动events 63 4.3.1 事件发射器 64 4.3.2 error事件 65 4.3.3 继承EventEmitter 65 4.4 文件系统fs 65 4.4.1 fs.readFile 66 4.4.2 fs.readFileSync 67 4.4.3 fs.open 67 4.4.4 fs.read 68 4.5 HTTP服务器与客户端 70 4.5.1 HTTP服务器 70 4.5.2 HTTP客户端 74 4.6 参考资料 77 第5章 使用Node.js进行Web开发 79 5.1 准备工作 80 5.1.1 使用http模块 82 5.1.2 Express框架 83 5.2 快速开始 84 5.2.1 安装Express 84 5.2.2 建立工程 85 5.2.3 启动服务器 86 5.2.4 工程的结构 87 5.3 路由控制 89 5.3.1 工作原理 89 5.3.2 创建路由规则 92 5.3.3 路径匹配 93 5.3.4 REST风格的路由规则 94 5.3.5 控制权转移 95 5.4 模板引擎 97 5.4.1 什么是模板引擎 97 5.4.2 使用模板引擎 98 5.4.3 页面布局 99 5.4.4 片段视图 100 5.4.5 视图助手 100 5.5 建立微博网站 102 5.5.1 功能分析 102 5.5.2 路由规划 102 5.5.3 界面设计 103 5.5.4 使用Bootstrap 104 5.6 用户注册和登录 107 5.6.1 访问数据库 107 5.6.2 会话支持 110 5.6.3 注册和登入 111 5.6.4 页面权限控制 120 5.7 发表微博 123 5.7.1 微博模型 123 5.7.2 发表微博 125 5.7.3 用户页面 126 5.7.4 首页 127 5.7.5 下一步 129 5.8 参考资料 129 第6章 Node.js进阶话题 131 6.1 模块加载机制 132 6.1.1 模块的类型 132 6.1.2 按路径加载模块 132 6.1.3 通过查找node_modules目录加载模块 133 6.1.4 加载缓存 134 6.1.5 加载顺序 134 6.2 控制流 135 6.2.1 循环的陷阱 135 6.2.2 解决控制流难题 137 6.3 Node.js应用部署 138 6.3.1 日志功能 138 6.3.2 使用cluster模块 140 6.3.3 启动脚本 142 6.3.4 共享80端口 143 6.4 Node.js不是银弹 144 6.5 参考资料 146 附录A JavaScript的高级特性 147 附录B Node.js编程规范 167

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老码识途呀

写作不易,多谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值