nodejs 山羊上山系列(1)- 搭建开发环境

最近在看很早之前就看过的一个nodejs教程,主要是从零搭建一个前后台node项目的博客系统,在公交上通勤无聊就拿出来看看,当时看的比较粗,可能是工作上有了一些沉淀,这次看的时候发现了很多细节,例如为什么要这样切分模块,为什么要把业务逻辑进行抽离,怎么使用vscode进行nodejs程序的调试等。虽然很基础,但是还想记录一下,毕竟talk is cheap,能写下来或者给别人讲一遍,才说明自己真的明白了。所以记录一下这个过程…

前言

我个人喜欢短小一些的博文,特别是长时间在通勤路上或者一些碎片的时间,我都喜欢看一些技术博客。长时间下来,我发现掘金啊,segment default上有一类博文我就特别钟爱:
篇幅不长,内容切分成多个章节,一个章节只阐述一个或者一类的知识点,我不知道是不是写博客也是在遵守单一原则
这样一方面我可能在10分钟看完一个内容,就可以去忙别的事情了,有一个commit的节点。再就是下次还可以接着看后面的内容,不需要回忆之前的内容,内容相对独立。
所以这个系列,我也打算这样尝试一下,分成几个不同的章节,一个章节很简单的写一个内容…

本篇幅主要的技术点

[✔] 使用node原生http模块搭建http-server
[✔] 使用nodemon处理热加载
[✔] 使用cross-env处理不同操作系统环境变量(通过nodejs的process全局变量的process.env.NODE_ENV就可以获取)
[❌] 使用querystring处理get请求的参数
[❌] 使用promise的方式获取post请求body参数的获取
[❌] 使用es6 Class的方式定义响应数据的基础格式,然后对成功响应和失败响应extends基础格式
[❌] mySql常用操作汇总
[❌] nodejs链接本地mysql数据库响应客户端请求
[❌] 登陆校验/登陆信息存储
[❌] nodejs链接redis数据库
[❌] nginx的配置反向代理
[❌] 日志管理
[❌] 信息安全(sql注入/xss攻击/md5信息加密)

初始化项目

1
2
3
4
5
6
mkdir blog // 创建项目目录
cd blog //进入项目目录
npm init -y //初始化项目的package.json文件
mkdir bin // 创建项目入口文件夹bin
touch www.js // 创建项目的入口文件www.js
npm install cross-env nodemon --save-dev
  • 项目安装一些插件
    • cross-env适配window和macos等操作系统,设置环境变量
    • nodemon本地开发阶段帮你监听文件修改并热更新/线上环境常使用pm2来做进程守护和多线程任务,充分利用硬件的性能

这样就生成了一个项目的目录,现在我们修改一下package.json中项目的入口文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"name": "blog",
"version": "1.0.0",
"description": "",
"main": "bin/www.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "cross-env NODE_ENV=dev nodemon bin/www.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"cross-env": "^6.0.3",
"nodemon": "^1.19.4"
}
}

修改package.json中项目的主入口

1
2
3
4
5
{
"script":{
"main":"bin/www.js"
}
}

设置环境变量

  • 在package.json中使用cross-env设置NODE_ENV可以设置环境变量,然后再使用的地方可以根据nodejs提供的process全局变量上的process.env.NODE_ENV获取当前运行的环境变量
  • 通常根据这个环境变量可以控制本地数据库和线上数据库,本地开发的ip和上线后部署服务器的ip等。

写npm脚本

1
2
3
"scripts": {
"dev": "cross-env NODE_ENV=dev nodemon bin/www.js"
}

使用nodejs起一个httpserver

1
2
3
4
5
6
7
8
9
10
11
12
13
 // 第一步:引入http模块
const http= require('http')
const PORT = 3000 ; // 可以将端口,api和模块前缀还有接口地址都配置在config文件中
// 第二步:创建一个httpserver
const server = http.createServer((req,res)=>{
// 逻辑
})
// 从设计模式的角度,这里可以把处理逻辑按模块啊话切分成serverHandler,这个入口文件只负责起一个http-server,逻辑分离
const serverHandler = require('./serverHandler.js')
const server = http.createServer(serverHandler)
// 第三步:监听端口
server.listen(PORT)
console.log('server is running on port', PORT)

vscode debug调试nodejs代码

  • 配置debug的文件入口
    debug_node
  • 在相应的代码中大断点就可以调试了

总结

到此为止,我们就在不使用框架的前提下,搭建了一个http-server,可以通过cross-env设置NODE_ENV来配置nodejs内置的process.env.NODE_ENV环境变量,并且可以使用nodemon做本地开发时候的热更新;如果在开发过程中遇到问题,也可以使用vs-code内置的debug方式进行断点调试;这样一个简单的server开发环境就搭建好了…

初到贵宝地,有钱的给个钱场,没钱的挤一挤给个钱场