NodeJS项目基础结构简单介绍

JavaScript08

NodeJS项目基础结构简单介绍,第1张

按照常规,去执行npm start

或者在Terminal中手动输入命令,结果如下:

可以看到是执行了test/package.json文件中的 start 命令,初始packagejson.json文件内容如下:

执行 start ,对应的命令为 node ./bin/www 并在命令行执行。现在项目已经启动成功了,可以打开浏览器输入 localhost:3000 查看一下,但是本次侧重点在于项目启动时候发生的完整的过程。所以……

那么我们需要看一下 ./bin/www 文件

通过 require() 来引入本地安装的包,这里加载了三个包 app、debug 、http ,主要关注一下app.js

可以看到app加载的为该项目基础组件,核心为 var app = express() 看一下express.js

将app用到的中间件等暴露出来,所以 app = express() 实际上就是加载应用基础组件,生成项目的根节点(当然这个节点是复合的)。所以在app.js中,进行的是加载应用基础组件并进行应用设置初始化(包含了视图目录设置、页面模板引擎设置、中间件的设置、静态资源目录设置以及错误捕捉相关内容)。

继续回到 www.js ,同样将debug配置、http相关组件进行加载。继而是默认端口号的设定。通过http.createServer(app),创建应用服务相关信息,并对端口进行监听。

浏览器输入 localhost:3000

控制台显示:

说明在以 GET 方式请求URI为 "/" 的资源,并以 GET 方式请求 /stylesheets/style.css 资源,这个发生在app.js中我们设定的资源请求。

我们来看下 ./routes/index 文件

即定义网站主页的路由

使用 express.Router 类创建模块化、可挂载的路由句柄(简称:路由模块)。Router 实例是一个完整的中间件和路由系统。最终,在应用中加载路由模块app.use('/', indexRouter)

通过 res.render 对视图进行渲染,上述为对index.ejs的渲染。 ps:在app.js中已经设定了views的所在目录 。语法: res.render(view [,locals] [,callback])

示例:

区别:路由句柄

为请求处理提供多个回调函数,其行为类似 中间件 。唯一的区别是这些回调函数有可能调用 next('route') 方法跳至下一个同路由的回调函数而略过其他路由回调函数。路由句柄有多种形式,可以是一个函数、一个函数数组,或者是两者混合。

使用一个回调函数处理路由:

使用多个回调函数处理路由(记得指定 next 对象):

使用回调函数数组处理路由:

混合使用函数和函数数组处理路由:

区别:路由方法

一个路由示例:

路由方法源于 HTTP 请求方法,和 express 实例相关联。

获取express的一个实例 app ,通过路由方法(和HTTP请求对应),GET方式请求 "/"。详细的路由方法参考链接: 路由方法

目前似乎最常见的线上部署nodejs项目的有forever,pm2这两种,本文恩主要给大家介绍了关于利用pm2部署多个node.js项目的配置教程,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。

前言

相信大家应该都知道,一般在实际项目部署中,我们服务器在启动的时候需要自动启动node服务。以前是通过liunx自带的命令启动。但是随着后台微服务越来越多。每次发布新程序。修改脚本太麻烦了。于是换成PM2来做。下面话不多说了,来一起看看详细的实现过程吧。

配置方法如下:

1.首先安装pm2npm install -g pm2

2.生成配置文件pm2 ecosystem

生成完成会有一个ecosystem.config.js的文件,

3.修改配置文件

编辑ecosystem.config.js

建立在后台模板渲染(ejs, pug)的基础上。前后分离架构请参考 webpack热更新实现

nodemon 在js文件变化后悔重新运行程序,在 package.json 的 scripts 中添加:

nodemon还有许多可选配置,具体参阅 nodemon文档

以koa为例

如若想要将错误抛出到浏览器页面和美化错误页面, express 可用 express-error-handler , koa 可用 onerror

由于是后台模板渲染,所以没法用 webpack-dev-server 进行自动刷新。能做的就是利用 webpack 的 watch 在前端js改变后自动打包,当然还是免不了手动刷新

注意一定要开启 source-map ,不然无法定位报错位置。为通知 webpack 是生产还是开发环境,可以使用 cross-env ,然后在 package.json 的 scripts 中添加:

开发时应运行两个命令:

生产环境一般使用 pm2 , pm2 已经帮我们完成了进程守护和负载均衡,内部实现原理在此不再赘述,具体参考 pm2文档 。

生成的配置文件已包含了生产环境的基本本质。跟多配置请参考 pm2文档 ,在 package.json 文件的 scripts 中添加

生产环境下运行

这时我们可以通过 process 全局变量获取到环境状态,在 app.js 中添加

类似 nginx 的 access.log 和 error.log ,利用 fs 模块的 appendFile 方法来输出日志。首先在项目根目录下新建文件夹 logs

建立一个模板命名为 notFound.pug ,在路由之后渲染

在webpack中添加插件

发布应用时需运行