1、node中常用的核心模块
使用 require 方法,来加载核心模块
2、搭建简单的服务器
// 1、加载 http 核心模块
var http = require('http');
// 2、使用 http.createServer() 方法创建一个 web 服务器
var server = http.createServer();
// 3、注册 request 请求事件,当客户端请求过来,
// 就会自动触发服务器的 request 请求事件,然后执行第二参数:回调处理函数
server.on('request',function( request,response ){
// 如果地址栏是 http://127.0.0.1:3000 request.url 就为 /
// 如果地址栏是 http://127.0.0.1:3000/a request.url 就为 /a
// 可以使用 node 很轻松的构建一个服务器
// 在 node 中专门提供了一个核心模块:http
// http 这个模块的职责就是帮我们创建编写服务器的
// 1、加载 http 核心模块
var http = require('http');
// 2、使用 http.createServer() 方法创建一个 web 服务器、返回一个 Server 实例
var server = http.createServer();
// 3、注册 request 请求事件
server.on('request',function( request,response ){
console.log('客户端的请求路径:' + request.url );
// response 对象有一个 write() 方法,可以用来给客户端发送响应数据
// write 可以使用多次,但最终要以 end() 方法来结束响应,否则客户端会一直等待
response.write('hello');
// 服务器告诉客户端,结束响应,可以呈递给用户了
response.end();
})
// 3000 代表端口号
server.listen(3000,function(){
console.log('服务器启动成功,可以通过 http://127.0.0.1:3000/来进行访问');
})
// ctrl+c 关闭服务器
服务器:对数据提供相关服务
=》客户端发请求给服务器
=》服务器接收请求
=》服务器处理请求
=》服务器把处理结果返回给客户端
关于 request.url
=》 如果地址栏是 http://127.0.0.1:3000 request.url 就为 /
=》 如果地址栏是 http://127.0.0.1:3000/a request.url 就为 /a
=》 如果地址栏是 http://127.0.0.1:3000/a/foo request.url 就为 /a/foo
3、读取文件( .txt、.html)的区别
// 1、先加载核心模块 fs
var fs = require('fs');
// 2、读取文件
fs.readFile('./README.txt',function( error,data){
if(error){
console.log('读取文件失败');
}else{
console.log(data.toString());
}
});
关于 readFile方法:
第一个参数就是待读取的文件的路径、
第二个参数是一个回调函数
=》 若读取成功,data 代表文件的内容,error 是 null
=》 若读取失败,data 是 undefined,error 是错误对象
server.on('request',function(request,response){
var url = request.url;
// 在HTTP协议中,Content-Type 就是用来告诉浏览器,服务器发送给他的数据的类型
if(url === '/plain'){
// text/plain 是普通文本
response.setHeader('Content-Type','text/plain;charset=UTF-8');
response.end('hello,你好。(注意:如果不加上一句,会出现中文乱码问题)');
}else if(url === '/html'){
// text/html 表示:让浏览器解析 html 文本
response.setHeader('Content-Type','text/html;charset=UTF-8');
response.end('hello,world点我
');
}
});
通过响应对象 response 的setHeader() 方法中设置 Content-Type,来正确读取不同格式的我呢间
4、写文件
var fs = require('fs');
fs.writeFile('./demo.txt','你好',function(error){
console.log('文件写入成功');
})
关于fs 对象的writeFile()方法:
=》 第一个参数:文件路径
=》第二个参数:想写入文件的文件内容
=》 第三个参数:回调函数
error
=》若写入成功,error 是 null
=》若写入失败,error 是错误对象
5、模板引擎
npm install art-template // 在终端运行
<body>
<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>
var ret = template('tpl',{
name:'Jack',
age:18,
province:'北京市',
hobbies:[
'sing',
'dancing',
'swimming',
]
})
console.log(ret);
script>
body>
模板引擎只关心 {{ }} 内部的内容
{{ }} 为插值表达式
在模板引擎中,除了{{ }} 以外的其他内容,全被当成普通文本对待
=》在 .js文件中使用
var template = require('art-template');
// 模板引擎的 render 方法第一个参数,应是字符串类型
var ret = template.render('hello {{ name }}',{
name:'Jack'
})
console.log(ret); // hello Jack
6、使用模板引擎加载 html 页面的简例
.js 文件
var template = require('art-template');
var fs = require('fs');
fs.readFile('../demo.html',function(error,data){
if(error){
console.log('读取文件失败');
}
var result = template.render(data.toString(),{
name:'Jack',
age:18,
province:'北京市',
hobbies:[
'sing',
'dancing',
'swimming',
]
})
// result 即为插值表达式 {{ name }}、{{ age }}等被替换后的结果
console.log(result);
})
从 demo.html 中读取过来的 data 是二进制类型
而模板引擎的 render() 方法接收的第一个参数应该是字符串
故要使用 data.toString() 进行类型转换
demo.html文件
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Documenttitle>
head>
<body>
<p>你好p>
<p>
大家好,我叫: {{ name }}
我今年 {{ age }} 岁了
我来自 {{ province }}
我喜欢:{{ each hobbies }} {{ $value }} {{ /each }}
p>
body>
html>
exports.printFoo = function() {
return "foo"
}
// 通过 foo.js 文件路径加载 foo.js 模块
var foo = require('./fo.js');
// 访问 foo.js 模块内的 printFoo 函数
conosle.log(foo.printFoo());