详解Angular调试技巧之报错404(not found)


Posted in Javascript onJanuary 31, 2018

序言

放假期间,学生忙着充电,学习“全栈开发”的不在少数,我时常收到读者的反馈,在调试《全栈开发之道》一书的实例时,遇到困惑。 尽管会遇到各种各样的问题,但总体来讲,可以归结为一个技术点,那就是—— Angular的调试。

编写Angular 代码并不难,难的是调试Angular代码。对于Angular新手来说,调试Angular需要一个过程,并在这个过程中不断积累经验,一看到报错,就能八九不离十猜出问题出在什么地方。

这篇文章,我们先来从常见的Angular调试技巧讲起,如果遇到404 (not found)报错,将怎么办?

模拟一个调试场景

《全栈开发之道》一书的实例 6.3.3 章节——单页面应用的实现,要实现这样的一个效果,如图所示:

详解Angular调试技巧之报错404(not found)

单页面应用效果

当点击 Home、About 、 Contact 时,下方的内容会相应地发生变化,而不需要页面发送一个新的请求。 单页面应用就是在一个页面内自动发生变化,也不用来回地跳转到新的页面,用户体验大大提升。

为了实现这样的单页面应用,书中创建了html文件(index.html、home.html、about.html、contact.html), 还有一个 myapp.js 用于router 和 controller, 并创建了应用程序的入口server.js

按照书上的教程,一步步完成代码的输入, 直到最后运行 node server.js 时,发现点击 Home、About、Contact 按钮时,下方的内容没有发生变化。 代码是没有问题的,这又是是怎么回事呢?

调试技巧

友情提示:

在调试 Angular时,一定要用 Chrome 浏览器。这一点很容易理解,Angular 是Google 家,Chrome 也是Google 家的,毫无疑问,Chrome 对自家的产品是支持的最好的。

在终端窗口运行 node server.js

在Chrome 浏览器中,输入: http://localhost:3000

此时,打开Chrome 浏览器的开发工具, 如果是Wiindows 系统,用F12键; 如果是Mac 系统,用 Option+Command+I ,这里的截图以Mac 系统为例。

详解Angular调试技巧之报错404(not found)

Angular 报错提示

先来看第一行错误,很多时候,第二行错误是第一行引起的;如果第一个错误解决了,下面的报错会自动消失。

http://localhost:3000/myapp.js 404 (Not Found)

在网络术语中,404 的意思是,你要请求的文件不存在。 这在传统的开发环境中,比如C、Java,即便文件找不见,也不会出现 404 错误。 再看接下来的提示 Not Found, 意思是没找见。

报错排查方法

遇到这种报错,排查的方法是,先看这个文件是否存在,再看它的访问路径是否正确。

(1)确认该文件是否存在。 文件名必须严格一致,文件名本身不用区分大小写。 比如: index.html 与 Index.html 是同一个文件, myapp.js 与 myApp.js 也是一回事。

(2)排查文件的路径。 排查文件名是否正确,这事简单; 而排查文件的路径,就是一个技术活儿了。 为什么这么说呢? 这是因为,在AngularJS中,有一个静态资源的概念。myApp.js文件分明是存在的,为何找不见呢? 先来看引用myApp.js 的那行代码。

在index.html 的 <head> 标签中:

<script src="myapp.js"></script>

引用一个文件时,要么给出绝对路径,要么给出相对路径,myapp.js 的文件路径是怎么约定的呢?

这要看 server.js 文件是怎么规定的路径约定,代码如下:

app.use(express.static(path.join(__dirname, 'public')));

__dirname是一个路径,它是指当前文件(server.js)所在的路径,而public 是__dirname的下一级目录。 path.join 是一个规定的表单式,express.static 表示该应用程序指定的 静态资源存放的位置。

按照这个概念,上面的 home.html 、 about.html、 contact.html、myapp.js 四个文件都是静态资源文件,再来审视这行代码:

<script src="myapp.js"></script>

代码这么写时,应用程序要在当前路径的 public 目录遍历 myapp.js 文件。 读到这里,你就明白报错404 的原因所在了吧。
需要把这些静态资源文件,统一放在public 文件夹下,如图所示。

详解Angular调试技巧之报错404(not found)

静态资源文件路径

进一步讨论

既然是路径惹的祸,那么能不能换一种思路,改一下静态资源路径的设置呢? 比如,修改server.js 文件的代码,如下:

app.use(express.static(path.join(__dirname, '/')));

这样一来,上面那四个文件就不用放到public了, 这种方法,虽然没有报错,问题是,这不是规范的做法。但凡稍微复杂一点的应用,都会用到大量的静态资源文件,如果不分配路径,将难以维护!

小结

掌握一门编程技术, 仅仅会编写代码是不够的。 评价一个人的编程水平,就看他的调试技能是否驾轻就熟。 后续,我要借助一些 Angular专用的调试工具,模拟一些出现bug的场景,看看如果快速发现root cause,并给出解决方案。

总之,掌握Angular的调试技能,是通往高级全栈工程师的阶梯!以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript?Apple设备检测示例代码
Nov 15 Javascript
javascript几个易错点记录
Nov 26 Javascript
jQuery实现图片预加载效果
Nov 27 Javascript
BootStrap 智能表单实战系列(十)自动完成组件的支持
Jun 13 Javascript
js选择器全面解析
Jun 27 Javascript
AngularJS中如何使用echart插件示例详解
Oct 26 Javascript
AngularJS实现动态编译添加到dom中的方法
Nov 04 Javascript
js实现自动轮换选项卡
Jan 13 Javascript
实现微信小程序的wxml文件和wxss文件在webstrom的支持
Jun 12 Javascript
BootStrap数据表格实例代码
Sep 13 Javascript
基于JavaScript中字符串的match与replace方法(详解)
Dec 04 Javascript
解决angular2在双向数据绑定时[(ngModel)]无法使用的问题
Sep 13 Javascript
微信小程序slider组件使用详解
Jan 31 #Javascript
vue项目实现记住密码到cookie功能示例(附源码)
Jan 31 #Javascript
AngularJS 将再发布一个重要版本 然后进入长期支持阶段
Jan 31 #Javascript
微信小程序progress组件使用详解
Jan 31 #Javascript
微信小程序button组件使用详解
Jan 31 #Javascript
基于$.ajax()方法从服务器获取json数据的几种方式总结
Jan 31 #Javascript
微信小程序模板(template)使用详解
Jan 31 #Javascript
You might like
php文件夹的创建与删除方法
2015/01/24 PHP
PHP之密码加密的几种方式
2015/07/29 PHP
PHP的关于变量和日期处理的一些面试题目整理
2015/08/10 PHP
PHP中子类重载父类的方法【parent::方法名】
2016/05/06 PHP
PHP抽象类与接口的区别详解
2019/03/21 PHP
HTML TO JavaScript 转换
2006/06/26 Javascript
网页和浏览器兼容性问题汇总(draft1)
2009/06/01 Javascript
javascript function调用时的参数检测常用办法
2010/02/26 Javascript
利用jquery包将字符串生成二维码图片
2013/09/12 Javascript
js替代copy(示例代码)
2013/11/27 Javascript
javascript setinterval 的正确语法如何书写
2014/06/17 Javascript
自动完成的搜索框javascript实现
2016/02/26 Javascript
通过BootStrap实现轮播图的实际应用
2016/09/26 Javascript
用js控件div的滚动条,让它在内容更新时自动滚到底部的实现方法
2016/10/27 Javascript
bootstrap flask登录页面编写实例
2016/11/01 Javascript
canvas实现粒子时钟效果
2017/02/06 Javascript
angular中ui calendar的一些使用心得(推荐)
2017/11/03 Javascript
轻松搞定jQuery+JSONP跨域请求的解决方案
2018/03/06 jQuery
微信小程序js文件改变参数并在视图上及时更新【推荐】
2018/06/11 Javascript
解决vue中修改export default中脚本报一大堆错的问题
2018/08/27 Javascript
vue3.0 项目搭建和使用流程
2021/03/04 Vue.js
[01:20]2018DOTA2亚洲邀请赛总决赛战队LGD晋级之路
2018/04/07 DOTA
python利用装饰器进行运算的实例分析
2015/08/04 Python
如何通过python画loss曲线的方法
2019/06/26 Python
Python爬虫爬取博客实现可视化过程解析
2020/06/29 Python
沪江旗下的海量优质课程平台:沪江网校
2017/11/07 全球购物
精选鞋类、服装和配饰的全球领先目的地:Bodega
2021/02/27 全球购物
如何用Java实现列出某个目录下的所有子目录
2015/07/20 面试题
会计电算化专业毕业生自荐信
2013/12/20 职场文书
学生拾金不昧表扬信
2014/01/21 职场文书
车辆转让协议书
2014/04/15 职场文书
爱国卫生月活动总结范文
2014/04/25 职场文书
师范生免费教育协议书范本
2014/10/09 职场文书
2014年店长工作总结
2014/11/17 职场文书
【js设计模式】SOLID五大设计原则
2022/03/24 Javascript
win10重装系统后上不了网怎么办 win10重装系统网络故障的解决办法
2022/07/23 数码科技