Node JS后端项目开发与生产环境总结

Node JS后端项目开发与生产环境总结,第1张

建立在后台模板渲染(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中添加插件

发布应用时需运行

后台程序是指asp、php、jsp或者asp.net等。后台程序代码与前台html和前端js脚本代码放在同一个页面,服务器会首先解析和执行后台脚本代码,然后把执行结果与html和js一并发送到客户端的浏览器,然后浏览器会渲染html页面并执行其中的前端js脚本代码。因此后台程序可以把结果嵌入到前端脚本中,然后在浏览器中被前端脚本调用。

下面用一个简单的例子(用的是ASP):

//这是一个简单的js脚本,不含任何后台代码:

<script>

alert(1+2)  //这个1+2是在前端进行计算的,与后台无任何关系

</script> //这个则是一个包含后台程序的js脚本(<%和%>之间的内容就是后台代码):

<script>

alert(<%=1+2%>)  //这个1+2的计算就是在后台完成的,就相当于 alert(3)

</script> //也可以把计算过程做成一个函数或者方法:

<script>

alert(<%=plus()%>)  //这个plus就是下面这个函数

</script>

<%

function plus()   '这个函数把1+2的计算结果再返回到上面

   plus=1+2

end function

%>

其他语言的实现原理也是大同小异的。

Node.js 生态很活跃的啊,为什么就这么难招人?

JavaScript 语言规范都到 2017 了, Node.js 版本也到 v7.7 了,正是无数专家学者,大公司,小公司和个人共同在推进这个开放的生态。 Teambition 作为一个创业公司,基于 Node.js 构建了我们的后端体系。我们从这个生态中受益良多,也在努力回馈这个生态。

Node.js 也很容易学啊,为什么就这么难招人?

JS 包括 Node.js 很容易学成上手。遥想 12 年时我就从零学起,半年时间就用 Node.js 和 AngularJS 做出了一套开源社区系统,至今还在运行。一般认为写 Node.js 的都是从前端转的,或者是后端新人,后端老手应该是不屑于 Node.js 的,这点我也认同。我本人前端、后端、 JS 、 Golang 、 Rust 都有写,目前主要在用 Golang 写后端, Node.js 相关的项目也在继续推进。 Node.js 的优点是容易学容易出成果,因为它的开源生态好,很多东西拿来即用,想深入学习则直接看项目源码造轮子。缺点就是当项目足够庞大足够复杂了不太好维护。所以我认为 Node.js 是一门非常好的后端入门语言,也非常适合用来开发轻量级的应用服务。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7989016.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存