nodejs的介绍
认识nodejs
学习nodejs的意义
- 了解浏览器端和服务器端的交互过程 可以缩短开发周期
- 出现bug 可以快速定位是前端问题还是后端问题
- nodejs和其它后端语言拥有一样的功能 可以做数据库的增删改善 爬虫 读写文件
什么是nodejs?
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境 v8解析js是最快的
nodejs是让js运行在服务器端
nodejs里面的API大多数都是异步
服务器端的js和浏览器端的js有什么区别?
客户端的js三个组成部分 :
1.DOM 文档对象模型 js操作网页内容的一套API
2.BOM 浏览器对象模型 js操作浏览器页面的一套API
3.ECMAScript 一套js语法的规范 for
服务端的js 只有ECMAScript 独立于浏览器运行的
nodejs的执行方法
方法1 REPL(read eval print loop)
读取
解析
打印
循环
1.打开命令框(CMD)
2.输入node 回车
3.输入js代码 按回车执行
4.退出node环境 使用后ctrl + c (按两次)
创建 Node.js 应用
步骤一 、引入 required 模块
我们使用 require 指令来载入 http 模块,并将实例化的 HTTP 赋值给变量 http,实例如下:
var http = require("http");
步骤二、创建服务器
接下来我们使用 http.createServer() 方法创建服务器,并使用 listen 方法绑定 8888 端口。 函数通过 request, response 参数来接收和响应数据。
实例如下,在你项目的根目录下创建一个叫 server.js 的文件,并写入以下代码:
var http = require('http');
http.createServer(function (request, response) {
// 发送 HTTP 头部
// HTTP 状态值: 200 : OK
// 内容类型: text/plain
response.writeHead(200, {'Content-Type': 'text/plain'});
// 发送响应数据 "Hello World"
response.end('Hello World\n');
}).listen(8888);
// 终端打印如下信息
console.log('Server running at http://127.0.0.1:8888/');
读取js(readFile)及参数
//导入文件模块
const fs = require("fs");
//导入http模块
const http = require("http");
//创建http服务
const server = http.createServer((request, response) => {
// 1.设置响应头 服务器为了告诉浏览器 我返回给你的数据 你用utf-8来解析
response.setHeader("content-type", "test/html;charset=utf-8")
// response.end(request.url);
console.log(request.url);
//请求路径: ./www/index.html
let reqUrl = request.url;
if (reqUrl === "/index.html") {
//参数1 : 需要被读取的文件的路径
//参数2 : 可选参数 我们这里给的是编码格式
//参数3 : 回调函数 里面有连个参数 err表示读取失败时返回的信息 data是读取到的文件信息
fs.readFile("./www/index.html", "utf-8", (err, data) => {
response.end(data);
})
}
})
// 开启http服务
server.listen("80", () => {
console.log("start");
})
写入js(writeFile)及参数
const fs = require("fs");
// 参数1 : 存入信息或者数据的文件路径
// 参数2 : 需要写入的数据
// 参数3 : 回调函数
fs.writeFile("./novels/03.txt", "海客谈瀛洲, 波涛微茫新难求, 越人语天姥, 云霞明灭或可睹......", err => {
// console.log(err);
if(!err) {
console.log('写入成功');
} else {
console.log("写入失败");
}
})
console.log("底部的代码");
执行js
终端里面输入 node 文件名
如:
node server.js
Server running at http://127.0.0.1:8888/
绝对路径
const fs = require("fs");
fs.readFile(__dirname + "\\novels\\01.txt","utf-8",(err,data)=>{
console.log(data);
})
console.log(__dirname + "\\novels\\01.txt");
console.log(__filename);
nodejs里面的相对路径 是相对于当前运行node命令的终端所处的相对路径
为了保证在任何地方打开终端 都可以运行 那么我们的路径使用绝对路径
问题 : 万一文件夹存在其他地方 绝对路径也不可靠 解决方法 : __dirname
__dirname
是当前文件所在的文件的绝对路径
__filename
是当前文件的绝对路径
设置setHeader请求头
//导入文件模块
const fs = require("fs");
//导入http模块
const http = require("http");
//创建http服务
const server = http.createServer((request, response) => {
// 1.设置响应头 服务器为了告诉浏览器 我返回给你的数据 你用utf-8来解析
response.setHeader("content-type", "test/html;charset=utf-8")
// response.end(request.url);
console.log(request.url);
//请求路径: ./www/index.html
let reqUrl = request.url;
if (reqUrl === "/index.html") {
fs.readFile("./www/index.html", "utf-8", (err, data) => {
response.end(data);
})
}
})
// 开启http服务
server.listen("80", () => {
console.log("start");
})
拼接path片段的方法
//导入模块
const http = require("http");
const fs = require("fs");
const path = require("path");
//创建服务器对象
const server = http.createServer((request, response) => {
console.log(request.url);
var reqUrl = request.url;
if (reqUrl === "/index.html") {
//读取index.html页面的内容
fs.readFile(path.join(__dirname, "www", reqUrl), "utf-8", (err, data) => {
if (!err) {
response.end(data);
} else {
console.log(err);
}
})
} else if (reqUrl === "/css/index.css") {
//读取index.html页面的内容
fs.readFile(path.join(__dirname, "www", reqUrl), (err, data) => {
if (!err) {
response.end(data);
} else {
console.log(err);
}
})
} else if (reqUrl === "/img/1.png") {
//读取index.html页面的内容
fs.readFile(path.join(__dirname, "www", reqUrl), (err, data) => {
if (!err) {
response.end(data);
} else {
console.log(err);
}
})
} else if (reqUrl === "/favicon.ico") {
//读取index.html页面的内容
fs.readFile(path.join(__dirname, "www", reqUrl), (err, data) => {
if (!err) {
response.end(data);
} else {
console.log(err);
}
})
} else {
response.end(
`<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html> <head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL ${reqUrl} was not found on this server.</p>
< /body></htm1>`)
}
})
//开启服务器
server.listen("4399", () => {
console.log("start");
})
url.parse()方法
是将一个URL字符串转换成对象并返回。
语法:
url.parse(urlStr, [parseQueryString], [slashesDenoteHost]);
接收参数:
1.urlStr 是url字符串
2.parseQueryString
为true时将使用查询模块分析查询字符串,默认为false
3.slashesDenoteHost
默认为false,//foo/bar 形式的字符串将被解释成 { pathname: ‘//foo/bar’ }
如果设置成true,//foo/bar 形式的字符串将被解释成 { host: ‘foo’, pathname: ‘/bar’ }
//导入http模块
const http = require("http");
const url = require("url");
//创建服务器对象
const server = http.createServer((request,response)=>{
console.log(request.method);
response.end(request.method);
console.log(request.url);
const reqUrl = request.url;
console.log(url.parse(reqUrl,true));
const getdata = url.parse(reqUrl,true).query;
console.log(getdata);
console.log(getdata.name);
console.log(getdata.skill);
})
//开启服务器
server.listen("8848",()=>{
console.log("start");
})
使用post传递数据
//导入http模块
const http = require("http");
const url = require("url");
const reqMed = request.method;
if (reqMed === "GET") {
console.log(request.url);
const reqUrl = request.url;
//引入url模块 调用parse来解析url
console.log(url.parse(reqUrl, true));
const getdata = url.parse(reqUrl, true).query;
console.log(getdata);
console.log(getdata.name);
console.log(getdata.skill);
} else if (reqMed === "POST") {
// const reqUr1 = request.url;
使用获取get请求数据的方法老获取post请求的数据 是获取不到的 因为他压根儿没进url
// console. log(url. parse(reqUr1, true));
// const getdata = url. parse(requr1, true) .query;
// console. log(getdata);
// post请求传递的数据可能比较大 不会一次性产地完毕 分段传输 所以我们要使用字符 串来接收数据
varpostStr = "";
request.on("data", (data) => {
// console.1og(data);
// console.1og(data. toString());
// console. 1og( decodeURI(data . toString()));
poststr += data;
})
// end事件表示数据传输完毕
// end事件没有参数
request.on("end", () => {
// post请求传递的数据不是url 只是单单纯的key=value&key1=va1ue1这种类型的字符胡
//我们可以直接使用querystring. parse来解析
const postData = querystring.parse(postStr);
console.log(postData);
})
}
//开启服务器
server.listen("8848", () => {
console.log("start");
})
使用get传递数据
// 导入express模块
const express = require('express')
const { response } = require('express')
// 创建服务器对象
const app = express()
// 发送get请求 检测"/"url
//回调函数是检测到url 才会执行
app.get('/', function (request, response) {
// 这里的response是express模块提供的
// 注意区分http模块里面的 response.end方法
response.send('Hello World');
})
app.get("/list", (request, response) => {
response.send(["爆炒牛肉", "红烧排骨", "鱼香肉丝", "西湖醋鱼", "西红柿炒番茄", "土豆炒马铃薯配洋芋"])
})
// 开启监听
app.listen(3000)