Express初体验

691 阅读5分钟

学习了node的人都知道,在node中有一个模块可以用于创建网络应用的HTTP模块,利用http模块就可以创建一个简单的服务器。

http.createServer这里是一个回调函数,里面有两个参数。一个是requestresponse,使用request对象外卖可以检查它的url属性,使用它就可以定义多个路由规则。response对象会对request的请求作出响应。

比如你的url属性是/api/courses,那么response的响应内容就是反馈给用户的。虽然这样也能工作,但是并不好维护。随着我们为应用定义越来越多的路由,我们需要在这个回调中定义很多个if代码块,所以这个时候就需要一个框架来解决这些问题。这个框架能够有个良好的结构,可以在保持良好维护性的前提下创建很多路由规则。

有很多的框架可以在node上创建web服务器,最受欢迎的就是Express。在npm官网搜索express可以看到目前的最新版本是4.16.4一周的下载量达到了七百多万,足以说明这是个非常受欢迎的框架。

并且它非常轻量级,非常快,而且有很好的文档系统。可以让我们很快的就能上手。

首先创建一个文件夹express-demo,进入文件夹,使用npm init -y命令来初始化文件夹。这样我们就有了一个package.json文件

mkdir express-demo
cd express-demo
npm init -y

然后开始安装express

npm i express

现在再文件夹下新建一个文件index.js,编写代码
app的对象有很多的方法,正如上面所列举的这些方法。这和http模块中的方法是一样的作用。

通常get用于请求数据、post用于发送数据、put用于更新数据、delete用于删除数据。这里就是对服务器上的数据进行增、删、改、查。

这里我们根据需要使用get方法开始,实现一个对应httpget请求的终端。get方法有两个参数,第一个参数是路径。第二个参数是一个回调函数,这个函数在对给定端口使用get方法时被调用。这个回调函数有两个参数,分别是requestresponse,然后是函数体的代码块。

request参数给了我们很多了解请求的属性,需要了解的最好是去看Express的文档。这里所使用到的属性只是一点点。

response会在接收到请求后进行响应。

最后我们要监听特定的端口,调用app.listen方法,给定端口号。当然我们还可以给它一个回调函数,在开始监听的时候执行,这个是可选的。
在控制台执行命令node index.js后提示我们正在监听3000端口,打开浏览器,访问本地主机的3000端口可以看到这里就打印出了Hello World的字符串。
现在回到控制台,Ctrl+c键强制退出,同时定义另一个路由,还是调用get方法。
在控制台执行,然后在浏览器打开访问http://localhost:3000/api/courses可以看到得到了数据。

回顾我们前面的代码,上面的请求实现,没有那些if代码块,而是调用get方法来创建新的路由规则。因为这样的结构,我们的应用更简洁,我们可以把路由规则移到另一个文件去。例如我们可以将所有与课程有关的路由合并到一个单独的文件course.js,所以EXpress将应用变得更有结构感。

截止到现在每次我们做出代码修改都要重启应用,这样实在是过于麻烦。是不是有更好的方法让我们更加专注于应用的构建呢?

答案肯定是有的,我们安装一个node包叫nodeMon,也就是node monitor的缩写。可以在控制台输入命令全局安装nodemon

npm i -g nodemon

有了它,我们就不用node来运行应用了,而是使用nodemon来运行。

可以看到nodemon会监测该文件夹所有的文件改动,任何文件名和扩展名。这样我们修改代码就可以看到控制台里,nodemon检测到了更改并自动重启应用,这样就不用再手动重启应用了。
回到浏览器刷新后也可以看到变化了。
我们知道端口号在启动应用前就已经设置好了,那如果这个端口号已经被占用的话那就太麻烦了,特别是在生产环境,优化的方法就是使用环境变量。基本上在node环境的共享平台,环境变量中管理端口的属性是PORT,环境变量就是在进程运行时才产生的变量。

在这个应用中,需要读取环境变量PORT属性。这里我们有一个process对象,这个对象有一个属性env,是环境变量的缩写。然后加上所需的环境变量,这里也就是PORT。假如已经设置端口号我们就用这个,默认还是3000。保存到常量中。

//监听端口号
let port = process.env.PORT || 3000;
app.listen(port, () => {
  console.log(`正在监听端口号:${port}`);
});

mac上可以使用export命令设置端口号,在window上使用set设置端口号。我们在控制台设置下,然后启动应用看下。

set PORT=5000

这就是在node应用中正确设置端口号的方法,你需要先尝试读取环境变量PORT的值。如果有值就使用现有值,否则就使用在开发机器上设置好的端口。