Node.js基本原生操作

15 篇文章 0 订阅
7 篇文章 0 订阅

文件命名

  • 不要命名为 node.js

操作文件

var fs = require('fs');

// 读文件
// 注意,这里的 './' 相对的是执行 node 命令所处的终端路径
// 其实所有文件操作路径中,相对路径都是相对于执行 node 命令所处的终端路径
fs.readFile('./book.txt', function (error, data) {
    console.log(data.toString());
});

// 写文件
fs.writeFile('./book2.txt', '床前明月光', function (error) {});	

http 服务

var http = require('http');

// 创建服务器
var server = http.createServer();

// 服务器收到请求后做什么
server.on('request', function (request, response) {
    res.setHeader('content-type', 'text/plain; charset=utf-8');
    res.end('从前有座山');
});

// 启动服务器
server.listen(3000, function (error) {});

响应内容类型 Content-Type

查询地址:http://tool.oschina.net/

Node 中的 JavaScript

  • ECMAScript
  • 核心模块
    • Node 为 JavaScript 提供的服务器级别的 API,这些 API 绝大多数都被封装到了一个具名的核心模块中
  • 第三方模块
  • 用户自定义模块
    • 通过 require(‘./文件名’) 互相加载
    • 在 node 中,没有全局作用域,只有模块作用域
    • 相对路径中的 ‘./’ 不能省略,不然会被当做核心模块
    • 每个文件模块中都提供了一个对象:exports,它是一个空对象,其他模块可以通过 require() 方法接收到该对象

Node 中的模块系统

使用 Node 编写程序主要就是在使用:

  • ECMAScript
  • 核心模块
    • 文件操作的 fs
    • http 服务的 http
    • url 路径操作模块
    • path 路径处理模块
    • os 操作系统信息
  • 第三方模块
    • art-template
    • 必须通过 npm 来下载才可以使用
  • 自己写的模块

path 路径操作模块


path.basename()

获取路径文件名。

第一个参数是路径。

第二个参数是要去掉的文件后缀名。

path.basename('c:/a/b/c/index.js'); // 'index.js'

path.basename('c:/a/b/c/index.js', '.js'); // 'index'

path.dirname()

获取目录路径名。

path.dirname('c:/a/b/c/index.js'); // 'c:/a/b/c'

path.extname

获取文件扩展名。

path.extname('c:/a/b/c/index.js'); // '.js'

path.isAbsolute()

判断是否是绝对路径。

path.isAbsolute('c:/a/b/c/index.js'); true

path.parse()

综合的一个方法。

path.parse('c:/a/b/c/index.js');
{
    root: 'c:/',
    base: 'index.html',
	ext: '.html',
	name: 'index'
}

path.join()

拼接路径。

path.join('c:/a/b', 'c'); // 'c:\\a\\b\\c'

path.join('c:', 'a', '/b', './c'); // 'c:\\a\\b\\c'

Node 中的其它成员

在每个模块中,除了 require、exports 等模块相关 API 之外,还有两个特殊的成员。

  • __dirname
    • 可以用来获取当前文件模块所属目录的绝对路径,不包含文件名
  • __filename
    • 可以用来获取当前文件的绝对路径,包含文件名

在文件操作中,使用相对路径是不可靠的,因 为在 Node 中文件操作路径被设计为 相对于执行 node 命令所处的终端路径(不是 bug,有其他用处)。

所以为了解决这个问题,应该使用绝对路径。

补充:模块中的路径标识和这里的路径没有关系,不受影响,就是相对于文件模块

art-template

在 浏览器 中使用模板引擎

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	
	<script src="./node_modules/art-template/lib/template-web.js"></script>

	<script type="text/template" id="tpl">
		hello {{ name }}
	</script>

	<script>
		var ret = template('tpl', {
			name: 'Jack'
		});

		console.log(ret);
	</script>
</body>
</html>

在 node 中使用模板引擎

var template = require('art-template');

var tplStr = `
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<h1>大家好</h1>
	<p>我是 {{ name }}</p>
	<p>今年 {{ age }}岁了</p>
</body>
</html>
`

var ret = template.render(tplStr, {
	name: 'harry',
    age: 20
});
console.log(ret);
var template = require('art-template'),
	http = require('http'),
	fs = require('fs');

var server = http.createServer();
server.on('request', function (req, res) {
	fs.readFile('./art-template.html', function (error, data) {
		res.setHeader('content-type', 'text/html; charset=UTF-8')
		var str = data.toString();
		var ret = template.render(str, {
			name: 'harry',
		    age: 20
		});
		res.end(ret);
	});
	
});
server.listen(3000, function () {
	console.log('服务器启动了');
});

在服务端使用模板引擎就是实现了服务端渲染。

模板引擎最早诞生于服务端。

服务端渲染和客户端渲染的区别

  • 客户端渲染不利于 SEO 搜索引擎优化
  • 服务端渲染是可以被爬虫抓取到的,而客户端渲染很难被爬虫抓取,那么意味着用客户端渲染来渲染商品列表搜索引擎就搜索不到商品

node 中的 console

打开方式:在 terminal 中任意目录下输入 node 命令

作用:用来测试,不需要 require 加载核心模块

CommonJS 模块规范

在 Node 中的 JavaScript 有一个重要的概念:模块系统。

  • 模块作用域
  • 使用 require 方法加载模块
  • 使用 exports 接口对象导出模块中的成员

优先从缓存加载

自形领会

npm

node package manage

package.json

建议每一个项目都有一个 package.json 说明文件。

这个文件可以通过 npm init 的方式自动初始化出来。

目前来讲,最有用的是 dependencies 选项,可以用来帮我们保存第三方包的依赖信息。

建议:

  • 每个项目的根目录下都有一个 package.json 文件
  • 执行 npm install 包名 的时候都加上 --save 这个选项,用来保存依赖项信息

这样的话如果我们的 node_modules 不小心被删除了,就可以通过 npm install 命令自动把 package.json 中的 dependencies 中的所有依赖项都下载回来。

npm 常用命令

  • npm init
    • npm init -y 可以跳过向导,快速生成[–yes]
  • npm install
    • npm i
  • npm install 包名
    • npm i 包名
  • npm install --save 包名
    • npm i -S 包名
  • npm uninstall 包名
    • 只删除,依赖项会保存
  • npm uninstall --save 包名
    • 删除的同时会把依赖信息也去除
    • npm un -S 包名

解决 npm 被墙问题

方法一:

# 安装淘宝的 cnpm
# 以后安装包的时候把 npm 替换成 cnpm
npm install --global cnpm

方法二:

npm install 包名 --registry=https://registry.npm.taobao.org

方法三:

# 配置之后一劳永逸
npm config set registry https://registry.npm.taobao.org
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值