node用express写后端restful接口实战一:npm生成express项目、express-generator生成express项目、用nodemon实时监听代码变化
node后端,常用express 和 koa用来开发
一、用npm生成express项目
1.新建 Express 项目
这一集,咱们来正式跑一个Express项目
$ mkdir myapp
$ cd myapp
$ npm init
同样的新建项目文件夹后,使用 npm init,创建 package.json。这次没有使用 -y 参数,所以命令过程中会问我们几个问题,大多数问题都是直接按回车就可以了。
但有一个地方要注意,项目的入口文件咱们填写 app.js
:
entry point: (index.js) app.js
最后会生成这样的 package.json
{
"name": "myapp",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
2.使用 npm 安装 express
$ cnpm i express -S
3.新建app.js文件
在 myapp 目录中,创建一个 app.js 的文件,然后添加以下代码:
var express = require('express');
var app = express();
app.get('/', function (req, res) {
res.send('Hello World!');
});
app.listen(3000, function () {
console.log('Example app listening on port 3000!');
});
说明:
-
前两行就是引用并调用express。
-
第二段代码是说,当有一个 get 请求在 / 这个路径时,响应一个 Hello World! 出来。
-
最后一段代码,是说在 3000 端口启动服务,并在 终端 里显示提示信息。
4.跑起来,就现在
node app.js
访问 http://localhost:3000/ 就可以看到Hello World!了
5.自定义命令
除了上面这种方法启动服务外,咱们还可以通过自定义命令来启动服务。package.json 中找到这一行,"test": "echo \"Error: no test specified\" && exit 1"
,删掉后,添加:
"scripts": {
"start": "node app.js"
},
先停止掉服务
ctrl + c
新的运行命令
然后试试自定义的命令,发现依然是可以正常运行的。
npm start
总结这节课的内容比较简单,主要学习了:
- 一个简单的 Express 项目包含了哪些内容。
- 怎么运行、访问 Express 项目。
- 如何在 package.json 中,自定义命令。
二、用express脚手架创建项目
1.先来安装 express-generator
$ cnpm install express-generator -g
Tips: 这里安装 express-generator 使用的是 -g 参数,也就是将它装成全局的了。这样才能让它在任意目录都运行 express 命令。
2.新建项目,安装依赖
$ express --view=ejs blog
$ cd blog
$ cnpm install
- 这里指定了 view,使用 ejs 模板引擎。ejs 是一套类似 Rails 中 ERB 的模板引擎,学习起来非常简单的,几乎 零成本。进入项目后,安装相关依赖包。
- blog 是新建blog项目目录名
3.运行项目
$ npm start
然后在浏览器中输入 http://localhost:3000,可以看到 Express 已经正常跑起来了:
Express
Welcome to Express
4.生成的项目有如下目录结构:
public
中是放的各种静态资源,例如 css、图片和一些前端页面所需要的 js 代码。routes
是程序的路由部分,路由简单的理解就是将不同的 URL,分别对应到不同的程序代码上去。如果你之前学过用过其他语言开发后端,这里的 routes 其实相当于其他 传统MVC框架 的 路由 + 控制器。咱们开发项目,主要要写的逻辑代码就是放在这里。views
,程序的 视图 部分,说白了就是 html 模板 放这里。因为我们使用的是 ejs 模板引擎,所以文件的后缀名变成了ejs
,而不是 html 了。
5.代码解析
路由
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
第一行代码是说:当访问 / 这个路径的时候。function 里面应当怎样处理。这里有三个参数:
- req 是 requset 的缩写,就是请求的意思。如果用户传递过来的值,类似于 PHP中的 \(_GET、\)_POST取值,在 Express 中就需要通过 req 来接收。
- res 是 response 的缩写,就是响应的意思。当用户有请求过来后,总得响应点什么给用户吧。要么是 渲染一个模板,要么就返回一段 json,这就需要用到这里的 res 了。
- next 是前往下一个中间件的意思,后面咱们开发项目碰到时再来说。
第二行代码是说:使用 res 的 render 方法,渲染了一个叫做 index 的模板。并且将 title 传递到了模板中。
2.视图
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<h1><%= title %></h1>
<p>Welcome to <%= title %></p>
</body>
</html>
在 views/index.ejs
模板中,看到了有几个 <%= title %>
,这里就是接受刚才路由部分,发送过来的 title。因为传递过来的 title 值为 Express。所以,浏览器上就显示了 Welcome to Express
修改文件,必须重启
这时候咱们再来做一个测试,将 title 改为 sky
router.get('/', function(req, res, next) {
res.render('index', { title: 'sky' });
});
刷新页面后,发现浏览器显示的还是以前的 Welcome to Express,解决方法是需要先停止服务再重启。果然就变成了,Welcome to sky。
三、使用 nodemon 监听代码变动
但每次改完代码后,都需要重启服务,这让我们开发的过程非常不方便。为了解决这个问题,最方便简单的方法是来安装 nodemon。先停止掉服务后,运行
1.安装nodemon
cnpm i nodemon -S
2.修改启动命令
然后在package.json中,启动服务的命令改为
"scripts": {
"start": "nodemon ./bin/www"
},
修改代码并测试效果
使用 npm start
启动服务,再次修改代码,
router.get('/', function(req, res, next) {
res.render('index', { title: '长乐未央' });
});
刷新浏览器,果然页面的显示的内容会自动变化了。