用于操作后端的服务。
Node.js不是一门语言,也不是库,也不是框架,Node.js是一个运行时环境,简单的来说就是Node.js可以解析和执行JavaScript,以前只有浏览器可以解析执行javaScript代码,也就是说现在的javaScript 可以完全脱离浏览器来运行。
Node读文件:
在使用的时候需要引入fs模块,fs(file-style),使用里面的fileRead方法,进行读取,有两个参数一个是error,一个是data
Node的核心模块 :
核心模块是由Node提供的一个个的具名的模块,他们都有自己特殊的名称标识,例如:
Fs -- 文件操作的模块
Http --- 网络服务的构建模块
os --- 操作系统的模块
path --- 操作处理路径的模块
所有的核心的模块在使用的时候都必须手动先使用,require 方法来加载,然后才可以使用,在使用的时候,把需要被外部访问的使用的成员手动的挂在到 ‘exports’ 接口对象中,然后在使用的时候,直接用require 这个模块,进行引用
Http:
进行模块的安装: npm instarll art-tempalte
Require 进行引用
IP : 地址定位计算机
端口,定位具体的应用程序
Content - type 服务器把每次相应的数据是什么内容都告诉客户端,然后进行响应
// 监听Server的reuuest 请求时间,设置请求处理函数
var http = require("http");
var server = http.createServer();
/*
* 监听Server的request请求时间,设置请求处理函数
* 请求
* 处理
* 响应
* 一个请求对应一个响应,如果在一个请求的过程中,已经结束响应了,则不能重复发送响应
* 没有请求就没有响应
* */
server.on("request",function (req,res) {
var url = req.url;
if (url === '/'){
res.end("hello word");
}else{
res.end('404 Not Found');
}
});
// 绑定端口号,启动服务
server.listen(3000,function () {
console.log("runing ..")
});
Template:
模板引擎最早就是诞生于服务器端,后来才发展到前端,在使用Template引擎的时候,需要使用require('art-template') ,参数中的art-template指的是下载包的名字
在使用第三方插件的时候,如果进行npm下载,引入 template : npm art-template
Each:是art-template 的模板语法,专属的,只能在当前的模板引擎中使用
{{ each 数组名称 }}
<li> {{ $value }} </li>
{{ /each }}
在使用template 的时候,渲染的数据需要在scripte标签中。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title></title>
</head>
<!--
在浏览器中是进行引用
-->
<script src="node_modules/art-template/lib/template-web.js"></script>
<script type="text/template" id="tpl">
大家好:我叫{{ name }}
我今年{{ age }}
我来自{{ province }}
我喜欢:{{ each hobbies }} {{ $value }} {{ /each }}
</script>
<script>
template('tpl' ,{
name:'jack',
age:'14',
province:'北京市',
hobbies:['写代码','唱歌','打游戏']
});
</script>
<body>
</body>
</html>
Url:
在node中,url是用来操作请求的路径的
咋使用的时候引入url路径即可,在解析的时候,第一个参数是解析的路径,如果第二个参数为true表示将请求的路径中的参数解析成对象,在对象中数据的key为query
如果第二个参数传递的为false ,表示会将请求的参数按照字符串进行解析
请求的路径会在 key 为 pathname中显示。
Module.exports 的使用:
Node中的模块的作用域,默认文件中的所有的成员只有在当前模块有效,对于希望可以被其他模块访问的成员,我们就需要把这些公开的成员都挂载到Exprots接口,对于对象中就可以导出多个成员(导出多个成员,只能放在对象中),在使用的时候只能用exports点设置属性,如果给 Module.exprots 赋值,则会改变其指向,而此时赋值给Exporte的值在引用的时候,是获取不到的
Exports:
exports.a=123;
exports.b='hello';
exports = function () {
console.log('ccc');
};
exports.d={
foo:'bar'
};
引用:
var app = require('./data');
console.log(app);
console.log(app.a);
console.log(app.d);
Module.exports 的使用:
var doo = 'bar';
function add(x,y) {
return x+y;
}
function add1() {
foor:"123";
add:{
str:"12"
}
}
module.exports =add1;
Module.exports 的引用:
var app =require('./data');
console.log(app);
console.log(app.add1);
console.log(app.foor);
原理:在Node中Exports的底层,moudle.exports ,所以在使用的时候,需要使用Exports点属性赋值,不要直接赋值给Exports,否则会改变Exports的指向,Node在最后返回是Moudle.exports,如果Exports的指向修改之后,赋值给exports的值就不会被返回,如果在引用的时候,就不会获取到其对应的值。
缓存加载
当文件加载一遍以后,当在使用到该文件的时候,不会再去加载一遍,而是直接从缓存中获取
Require
Require 在加载模块的时候,会先查找package.json 文件,如果没有会默认找index.html如果连index.html都找不到,就会报错,如果找到package.josn ,会去查找key为main的键值对,该value 对应的就是你要引入的模块加载的文件,如果在引入的时候,没有就会报错
在使用第三方插件的时候,会全部放在node_modules 这个文件中,如果在当前目录中没有找到该文件,则会去上一级目录中查找,如果没有找到会一直往上查找,如果一直没有找到则会报错,注意: 在查找的时候,不会去兄弟的子目录中查找,只会去上级中查找,不会出现多个node_modules文件。
模块的找机制:
优先会从缓存中加载,如果没有会去核心模块中查询,会先在当前目录中查找node_modules文件夹,如果找不到会在上一级目录中查找(不会去兄弟的目录中查询),如果最后还是找不到,就会报错(Can not find module xxx),一个项目中有且仅有一个node_module,而且是存放在目录的根目录中。
Npm指令:
npm 用于引入第三方插件
指令:
- npm init : 用于生成package.json 的文件 会有向导,完成安装
- npm init -y : 可以跳过想到, 直接完成安装
- npm install : 会把当前的package.json 中的 dependencies
- npm install 包名 会把指定的包名的依赖完成安装
- npm install 包名 -- save 下载指定的模块包, 并且会向依赖的package.json 中添加依赖说明
- npm uninstall 包名 用于删除安装的第三方插件
- npm uninstall 包名 -- save 会将下载的包删除掉,并且把依赖也一起删除掉
解决Npm被拦截的问题:
因为在操作npm的时候,操作的是国外的资源库,所以在使用的时候,只要连接到淘宝提供的镜像就可以了,
在cmd中添加一行命令:npm config set registry https://registry.npm.taobao.org
然后查看配置: npm config list
Package.json
用于记录你当前的项目依赖于那些模块,该文件会在当前项目下创建,不需要你手动创建使用npm init (在命令行中),需要输入以下内容,会创建,但是在使用npm init 的时候,会有安装导向,如果 不想进行安装向导操作的话,直接执行 npm init -y,就会跳过安装向导。
npm init -y
在安装第三方插件的时候,需要在第三方包后面添加 -- save 此时才会再Package.json 文件中添加第三方的依赖,如果在以后,想要安装项目中用到的第三方的插件依赖使用 npm install 指令就可以完成项目依赖第三方插件的安装
Package.json 中会保存添加的依赖