写文件
fs.writeFile('./data/你好.md','大家好,给大家介绍一下,我是node.js',function(error){
if(error){
console.log("文件写入失败");
}else{
console.log("文件写入成功");
}
})
- 第一个参数:文件路径
- 第二个参数:文件内容
- 第三个参数:回调函数
- 成功
data 数据
error null - 失败
data undefined
error 错误对象
//读文件 友好的提示信息
fs.readFile('./data/a.md',function(err,data){
if(err){
console.log("读取文件失败");
}else{
console.log(data.toString());
}
})
使用Node非常轻松的构建一个Web服务器
- 在node中专门提供了一个核心模块:http
- http这个模块的职责就是创建编写服务器
- 加载http核心模块
- 使用http.createServer()方法创建一个web服务器,返回一个server示例
- 服务器提供对数据的服务 发请求->接受请求->处理请求->发送响应
- 绑定端口号,启动服务器
- 注册request请求事件
当客户端请求过来,就会自动触发服务器的request请求事件,然后执行第二个参数:回调处理
server.on('request',function(){
console.log("收到客户端的请求了")
})
- 绑定端口号
server.listen(3000,function(){
console.log("服务器启动成功了")
}
响应
- request 请求对象
请求对象可以用来获取客户端的一些请求信息,例如请求路径
- response 响应对象
响应对象可以用来给客户端发送响应消息
server.on('request',function(request,response){
console.log("请求路径为:" + request.url);
response.write('hello,nodejs');
//write可以使用多次,但一定要用end来结束响应。否则客户端会一直等待
response.end();
})
- 推荐直接简写 response.end(‘hello,node.js’); 不要写write
- response.end()响应内容只能是字符串/二进制数据
- 数组转成字符串 JSON.stringfy()
- 字符串专程json对象 JSON.parse()
- 根据不同的请求路径发送不同的响应结果
- 1.获取请求路径
- req.url 获取到的是端口号之后的那一部分路径
- 默认 / /login
Node中的JavaScript
1.核心模块
Node为javascript提供了很多服务器级别的API,这些API绝大多数都被封装到了一个具名的核心模块中了。
例如文件操作的fs核心模块,http服务构建的http模块…
var fs = require('fs');
简单的模块化
- require 是一个方法,它的作用是用来加载模块的(下面会提到require的第二个作用)。
- node中模块有三种 具名的核心模块、用户自己编写的文件模块、第三方模块
- 相对路径必须加 ./ 如果没有加./ 会被当成核心模块
console.log("a start");
require('./b.js');
console.log('a end');
- 在Node中,没有全局作用域,只有模块作用域。
- 既然是模块作用域,那如何让模块与模块之间进行通信
- require有两个作用
- 加载文件模块并执行里面的代码
- 拿到被加载文件模块导出的接口对象(注意得到的是一个对象哦,获得属性要.)
a.js
const bExports = require('./b');
console.log(bExports.foo);
b.js
exports.foo 导出
var foo = 'bbb';
exports.foo = 'hello,I get bbb';
var age = 18;
exports.age = age;
exports.add = function(x,y){
return x+y;
}
引入核心模块
const fs = require('fs');
fs.readFile('./a.js',function(err){
})
引入自定义模块
const fs = require('./b.js')
端口号和ip地址
- IP地址用来定位计算机
- 端口号用来定位具体的应用程序
(所有需要联网通信的软件都必须具有端口号) - 端口号的范围 0-65536
响应内容类型
在服务器默认发送的数据,其实是utf8编码的内容。但是浏览器并不知道是utf8编码的内容。浏览器在不知道服务器响应内容的编码下会按照当前操作系统的默认编码区解析。中文操作系统默认是gbk。
- 解决方式是告诉浏览器发送的内容是什么编码的
res.setHeader('Content-Type','text/plain;charset=utf-8')
- 在http协议中,Content-Type就是用来告知对象我给你发送的数据内容是什么类型 text/plain text/html
res.setHeader('Content-Type','text/html';charset=utf-8')
res.end('<p>hello world <a href = "#">点我</a></p>')
图片不需要指定编码
- Content-Type : http://tool.oschina.net/ 不同的资源对待不同的Content-Type
- url 统一资源定位符,最终一个url对应到一个资源