初识Node.js
概述
相信对于专注javascript发展的同学来说,nodejs已经不是一个陌生的词眼。有关nodejs的相关资料网上已经铺天盖地。由于它的高并发特性,造就了其特殊的应用地位。
借用Node.js官网的定义:Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。Node.js 的包管理器 npm。
相信之前有了解React Native的都知道,RN依赖Node.js环境,还有Angular.js都是需要Node.js的环境的,那么我们就来说说怎么搭建Node.js的开发环境和运行环境吧。
环境搭建
1,下载安装文件
首先进入官网:https://nodejs.org/en/,我们选择稳定版
2,安装nodejs
下载后我们直接next安装就好了。安装完成后我们发现安装目录默认添加了一个npm管理工具
3,安装相关环境
npm install express 回车等待安装express
npm install jade 回车等待安装jade
npm install mysql 回车等待安装mysql
......
默认情况下上述组件都是安装在C:Program Filesnodejsnode_modules文件夹下 这也是nodejs相关组件的自动查找路径。
4,创建工程
现在有express,npm install express -g
使用命令express HelloApp
在HelloApp下新建helloworld.js测试
var http = require("http");
http.createServer(function(request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
}).listen(8888);
console.log("nodejs start listen 8888 port!");
当然我们可以直接可以通过命令查看,接下来我们将介绍如何在Docker里面部署node.js应用。
在Docker快速部署node.js应用
Docker简介
可能还有一些同学不了解docker这个项目,docker是由go语言编写的,一个快速部署的轻量级虚拟技术项目,他允许开发人员将自己的程序和运行环境一起打包,制作成一个docker的image(镜像),这样部署到服务器上,也只需要下载这个image就可以将程序跑起来,免去每次都安装各种依赖和环境的麻烦,还能够做到应用程序之间的隔离。
Docker使用
创建server.js
vi server.js
创建Dockerfile
vi Dockerfile
Docker会依照Dockerfile的内容来构建一个镜像。
FROM hub.c.163.com/nce2/nodejs:0.12.2
# Create app directory
RUN mkdir -p /home/Service
WORKDIR /home/Service
# Bundle app source
COPY . /home/Service
RUN npm install
EXPOSE 8888
CMD [ "npm", "start" ]
我们来解释下上面几句话的意思:
第一句,从hub.c.163.com/nce2/nodejs:0.12.2
这个镜像地址拉取Image。
# Create app directory
RUN mkdir -p /home/Service
WORKDIR /home/Service
使用UN 用于在Image里创建一个文件夹,将来用于保存我们的代码。
# Bundle app source
COPY . /home/Service
RUN npm install
使用COPY是把本机当前目录下的所有文件拷贝到Image的/home/Service文件夹下,并使用npm安装。
EXPOSE 8888
我们的web app监听的是8888端口,使用8888外部端口访问web。
构建Image
docker build -t mynodeapp .
运行镜像
docker run -d -p 8888:8888 ac5
-d 表明容器会在后台运行,-p 表示端口映射,把本机的8888商品映射到container的8888端口这样外网就能通过本机的8888商品访问我们的web了 为了查看我们的Docker是否部署成功,我们可以直接使用浏览器locahost:8888来查看,当然我们也可以使用curl命令来查看。
curl -i localhost:8888
- Appboy基于MongoDB的数据密集型实践
- 微信企业号登录授权Java实现获取员工userid根据userid换openid
- 微信支付-微信红包Java版本
- Universe入门
- 分享一款值得分享的写作工具
- 微信二次开发Java自定义菜单事件实现
- 微信OAuth授权获取用户OpenId-JAVA(个人经验)
- 【手写文字识别】-JavaAPI示例代码
- 【Python3-API】情感倾向分析示例代码
- SpringMVC+Hibernate +MySql+ EasyUI实现CRUD(一)
- 【Python3-API】通用文字识别示例代码
- Python入门教程之安装MyEclipse插件和安装Python环境
- AutoFlowLayout-多功能流式布局与网格布局控件
- RBAC新解:基于资源的权限管理(Resource-Based Access Control)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- JVM的基础知识点Java的内存模型
- Apollo配置中心管理后台的详解
- 麒麟子惯用框架分享(建议收藏)
- 全民打枪!在3D模型上的2D血条如何实现?
- SEO工具脚本,Python百度下拉框关键词采集工具
- 聊聊“异步”
- springboot解决前后端数据跨域问题
- 单细胞数据中到底应该如何处理线粒体基因
- Seurat小提琴图为什么有的只有点儿?
- Layui解决table日期的格式化问题
- Telegraf+Influxdb+Grafana 轻量级监控系统部署
- 国产开源文档管理系统——Wizard
- 力扣 1519——子树中标签相同的节点数
- PythonforResearch | 1_文件操作
- 你应该知道关于Python的这几个技巧!