前端爱好者从今天开始博客写学习笔记,
发现错误希望大家给予纠正,非常感谢!
上周开始正式接触node.js,以前对node的了解只知道它是一个环境,一个可以支持js脚本的运行环境,用来写后台服务器。
在node.js中文网有这样写到:
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。
Node.js 的包管理器 npm,是全球最大的开源库生态系统。
阅读并简单理解文档之后,手写代码(先逐行解析,后面附完整代码)
const http = require("http");
//定义http为node中给我们封装好的http模块,(node底层是用c++写的),个人理解当我们需要某个功能时都需要引入相应的模块。
const fs = require("fs");
//引入文件系统模块
const url = require("url");
//引入url操作模块
let sever = http.createServer(function(req,res){
//创建一个server对象,回调中的参数分别又是两个回调:接受请求的事件发生和响应请求的事件发生
let pathname = url.parse(req.url).pathname;//得到请求url
let query = url.parse(req.url,true).query;//得到请求的查询参数
console.log(pathname)
//这里得到的结果是/ 和 /favicon.ico,默认请求两次,一次根目录,一次小图标icon
if(pathname === "/"){
fs.readFile("./login.html",function (error,data) {
if(!error){
//回调中两个参数,error表示错误发生,data表示文件响应时返回的数据
res.writeHead(200,{"content-type":"text/html"});
//报头属性,头文件,当状态码为200(请求成功时)规定了请求HTTP报文和响应HTTP报文都拥有若干个报文关属性,它们是为协助客户端及服务端交易的一些附属信息。
>那么,到底什么是报头呢?
> 快到中午了,张三丰不想去食堂吃饭,于是打电话叫外卖:老板,我要一份[鱼香肉丝],要12:30之前给我送过来哦,我在江湖湖公司研发部,叫张三丰。
> 这里,你要[鱼香肉丝]相当于HTTP报文体,而“12:30之前送过来”,你叫“张三丰”等信息就相当于HTTP的报文头。它们是一些附属信息,帮忙你和饭店老板顺利完成这次交易。
res.end(data);
//结束响应,必须写相当于:
"res.write(data)
res.end;"
}else {
res.end("" + error);
}
})
//以下为扩展:最简单的登录验证应用
}else if(pathname === "/from"){
if(query.user === "tom" && query.pwd === "tom"){
res.writeHead(200,{"content-type":"text/html;charset=utf-8"});
res.end("登陆成功");
}else{
res.writeHead(200,{"content-type":"text/html;charset=utf-8"});
res.end("登录失败");
}
console.log(query);
}
})
sever.listen(8000,"127.0.0.1",function () {
console.log("服务器已开启")
});
//监听本地站点的8000端口,并且在后台打印“服务器已开启”
以下为扩展内容HTML代码(get简单登录验证)
<form action="http://127.0.0.1:8000/from" method="get">
<input type="password" name="pwd">
<input id="login" type="text" name="user">
<input id="submit" type="submit">
</form>
<!--注:提交数据到后台用到的是name属性-->
完整代码
const http = require("http");
const fs = require("fs");
const url = require("url");
let sever = http.createServer(function (req,res) {
let pathname = url.parse(req.url).pathname;
let query = url.parse(req.url,true).query;
if(pathname === "/"){
console.log(pathname)
fs.readFile("./login.html",function (error,data) {
if(!error){
res.writeHead(200,{"content-type":"text/html"});
res.end(data);
}else {
res.end("" + error);
}
})
}else if(pathname === "/from"){
if(query.user === "tom" && query.pwd === "tom"){
res.writeHead(200,{"content-type":"text/html;charset=utf-8"});
res.end("登陆成功");
}else{
res.writeHead(200,{"content-type":"text/html;charset=utf-8"});
res.end("登录失败");
}
console.log(query);
}
});
sever.listen(8000,"127.0.0.1",function () {
console.log("服务器已开启")
});
今天的学习笔记就到这里。