1. 项目结构
使用express-generator建好的项目,都是这个结构。现在我们一一分析下,它们都是用来干嘛的
bin/www
在package.json中,大家见过这个文件的配置。它是用来启动项目的文件,无需修改,也不用管它,知道它是干嘛的就好了。
node_modules
展开后,会发现里面有非常多的文件。这就是当我们使用npm i命令后,安装的项目依赖包。我们也不用管它,甚至将它们删掉都没关系。因为当你再次运行npm i后,它又会重新出现的。
public 目录
这里放的各种静态资源,例如 CSS、图片等等静态资源。但因为我们项目是专门开发接口的,所以这里的东西,大家完全不需要管它,根本用不上。
routes
这里是程序的路由部分,路由简单的理解就是将不同网址,分别对应到不同的程序代码上去。咱们开发项目,最重要的就是这个目录了,后面我们开发要写的代码主要也都是在这里。
app.js
这个文件也很重要,在开发中,我们需要做一些路由的配置、跨域配置,都会来修改它的。
package.json
这里主要记录的是项目的基本信息,和一些依赖包的情况。
package-lock.json
最后一个是package-lock.json,它是用来锁定npm i时,安装依赖包的版本号。并且将代码发给其他人后,保证其他人在npm i时,所使用的依赖包版本号能一致。这个文件删掉后,运行npm i也会自动重新生成的。
所以我们在开发中,目前要关注的就是router 目录 和 app.js,其他文件都无需理会。
2. 代码解析
再来看routes/index.js,
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function (req, res, next) {
res.json({ message: 'Hello node' });
});
module.exports = router;
2.1. var、let、const
一眼看过去,如果你也用的WebStorm,那么你会发现代码中的var,都会有灰色的波浪线。鼠标放上去后,会提示:'var' is used instead of 'let' or 'const',说推荐使用ES 6里面的let或者const来代替var。那么我们可以用编辑器的查找替换功能,来将它们全部改为const。macOS 里按command + r,使用 windows 就按ctrl + r,查找var,并替换成const。再点击 Replace All
2.2. 简单的了解一下路由
接着重要的来了,这就是路由了
router.get('/', function (req, res, next) {
res.json({ message: 'Hello node' });
});
注意看,这里有个get。get是请求的一种,我们后面还有碰到其他的请求。get请求大家就简单的理解成,用户访问浏览器了。get后面是/,这是访问地址的路径。
可以尝试做一个修改,将/改为/hello
router.get('/hello', function (req, res, next) {
res.json({ message: 'Hello 长乐未央' });
});
现在刷新页面,浏览器会提示你 Cannot GET /,接着我们访问 http://localhost:3000/hello,又会正确的显示内容了。
同样的,你希望通过其他的路径访问当前方法,那么直接修改这里就可以轻松实现了,这就是路由的作用
2.3. req、res 和 next
接着这里有个function,它就是当前路由/hello访问后,所对应的,要运行的函数。它里面有三个参数,分别是:req、res和next。
req
req是Request的缩写,也就是请求的意思。通过req,我们可以获取到用户通过URL,或者表单传递给我们的数据。例如用户提交了一个关于注册的表单,我们就可以从req中取出用户提交的数据,从而进一步存入到数据库中,保存起来。现在请先稍等一下,后面我们很快就会学习到相关的知识了。
res
res是Response的缩写,也就是响应的意思。通过res,我们可以对用户的请求做出响应。例如这里的
res.json({ message: 'Hello node' })
它的意思就是,当用户访问了 /hello 后,要通过json这种格式,显示一段欢迎信息给用户看。这样用户的浏览器上才能正确的显示数据啊。
next
最后的next,没错,它就是下一步的意思。它允许我们在当前函数中对请求进行一些处理,然后再传递给下一个函数。我们这里并没有用到它,关于这里的知识,需要将来在实现登录功能的时候,才会碰到。如果我们当前方法中用不到next,当然也可以直接删掉它。
2.4. 导出模块
最底部的module.exports = router,这是Node.js中一种导出模块的方式。在所有的路由文件中,你都将见到这一行,而这是必须存在的。因为只有这样写了以后,app.js中,才能正确的引用到我们当前的路由文件
var indexRouter = require('./routes/index');
既然打开了 app.js 文件,同样的,那就再来一个查找替换吧,将var,一次性都替换成const,这样就更符合ES 6的语法要求了。
3. 总结一下
- 目前开发中,只需要关注
routes 目录和app.js 文件就好了,其他的都不用管它。 - 路由的作用,就是让浏览器的访问地址,与代码段对应起来
- 推荐使用
ES 6语法,用const、let来代替var