Node基础知识整理

1.fs模块

在node中采用EsmaScript进行编码,没有Bom与Dom,和浏览器中的JS不一样。
浏览器中的js没有文件操作能力,但是Node中的js可以对文件进行操作。
fs是file-system的简写,就是文字系统。在Node中使用这个核心模块就需要引入。

1.读文件

Node是错误优先的回调函数
第一个参数返回错误,并且验证它是否出错;其他参数返回数据。在这里插入图片描述
第一个参数就是要读取的文件路径,第二个为编码类型,一般直接填写utf-8即可,否则读取的文件是乱码,第三个参数是一个回调函数。

2.写文件

第一个参数就是要读取的文件路径,第二个为编写的内容,第三个参数是一个回调函数。

fs.writeFile('red2.txt', '这里写文大家好,我是xxx!', (err) => {
    if (err) {
        console.log('Error you file');
    } else {
        console.log('Success');
    }
});

3.封装写法

1.直接封装

const fileMethod= {
    readFile: (path, cb) => {
        fs.readFile(path, 'utf8', (err, data) => {
            if (!err) {
                cb(data)
            }
        })
    },
    writeFile: (path, content, cb) => {
        fs.writeFile(path, content, 'utf8', (err) => {
            if (!err) {
                cb()
            }
        })
    },
}
var pathUrl = './modb/studen.json'
//readFile调用
 fileMethod.readFile(pathUrl, (data) => {})
//WriteFile调用
 fileMethod.writeFile(pathUrl, JSON.stringify(DataObj), () => {
     console.log('写入成功')
 })

2.promise封装

//pathUrl为路径
function readFiles(pathUrl) {
    return new Promise((resolve) => {
        fs.readFile(pathUrl, 'utf-8', (err, data) => {
            if (!err) resolve(data)
        })
    })
}
//pathUrl为路径,attr为保存的信息
function writeFiles(pathUrl, attr) {
    return new Promise((resolve) => {
        fs.writeFile(pathUrl, attr, 'utf-8', (err, data) => {
            if (!err) resolve(data)
        })
    })
}

//readFile调用
var pathUrl = './modb/studen.json'
readFiles(pathUrl).then((res) => {
        console.log(res)
    })

  writeFiles(pathUrl, 'helloWorld22').then((res) => {
        console.log(res)
    })

2.http创建简单服务器

Node中专门提供了一个核心模块http,可以使用这个模块来创建一个web服务器。
response.write可以使用多次,但是最后一定要使用end来结束响应,否则会一直的等待。

var http = require('http'); //1 加载HTTP模块
var serve = http.createServer(); //2 创建serve实例
//3 发起请求
serve.on('request', (request, response) => {
    response.write('Seccess Server http://127.0.0.1:3000/')
    response.end();
});
// 4 启动服务器
serve.listen(3000, function () {
    console.log('服务器启动成功!,访问http://127.0.0.1:3000,查看');
});

启动指令:

node  https.js

根据不同请求路径返回不同数据

response.end(); 是能传递string或者Buffer类型

serve.on('request', (request, response) => {
    console.log('输出收到服务器请求地址', request.url);
    if (request.url.includes('Login')) {
        response.write('Is Login');
    } else if (request.url.includes('zhuce')) {
        response.write('Is register');
    } else {
        response.write('404 Not Found');
    }
    response.end(request.url);
});

Ip和端口号的概念

Ip定位计算机

console.log('获取地址', req.socket.remoteAddress);

端口号定位应用程序

console.log('获取端口', req.socket.remotePort);

计算机一些默认端口号,最后不要使用。
开发中,使用一些简单的就可以了,例如:3000,5000,8080·····

设置utf-8编码解决乱码

在这里插入图片描述

解决:

需要设置响应内容类型(设置请求头)

res.setHeader(‘content-type’, ‘application/json; charset=utf-8’);

· Content-Type内容类型发送文件中的数据类型数据
常见的媒体格式类型如下:
text/html : HTML格式
text/plain :纯文本格式
text/xml : XML格式
image/gif :gif图片格式
image/jpeg :jpg图片格式
image/png:png图片格式
· 以application开头的媒体格式类型:
application/xhtml+xml :XHTML格式
application/xml: XML数据格式
application/atom+xml :Atom XML聚合格式
application/json: JSON数据格式
application/pdf:pdf格式
application/msword : Word文档格式
application/octet-stream : 二进制流数据(如常见的文件下载)
application/x-www-form-urlencoded : <form encType=””>中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)

服务器链式写法

var http = require('http');
http.createServer((req, res) => {
    res.end('close');
}).listen(80, () => {
    console.log('serve is success.please visit location adress http://127.0.0.1');
});

模板语法

1.安装

npm install art-template --save
  1. 在node中引入
var templates = require('art-template');

3.读取

    fs.readFile('./assest/index.html', (err, data) => {
            if (err) {
                res.end('is 404');
            }
            var htmlStr = templates.render(data.toString(), {
                msg: '这是一条数据'
            });
            res.end(htmlStr);
        });

4.在html页面输出

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <title>Document</title>
    </head>
    <body>

        <h1>node读取index成功</h1>
        <p>{{msg}}</p>
       {{each msg}}
        <div class="box">
            <h1>{{$value.name}} :</h1>
            <h2>{{$value.say}}</h2>
        </div>
        {{/each}}

    </body>
</html>

3.url模板

直接在node中使用require引入。

var url = require('url');

Url里面的方法有如下:

  {
        Url: [Function: Url],
        parse: [Function: urlParse],
        resolve: [Function: urlResolve],
        resolveObject: [Function: urlResolveObject],
        format: [Function: urlFormat],
        URL: [class URL],
        URLSearchParams: [class URLSearchParams],
        domainToASCII: [Function: domainToASCII],
        domainToUnicode: [Function: domainToUnicode],
        pathToFileURL: [Function: pathToFileURL],
        fileURLToPath: [Function: fileURLToPath]
}

通过parse方法能获得到pathname路径以及query参数

url.parse(req.url, true);
url.parse('/sendMsg?a=1&b=2',true)
Url {
  protocol: null,
  slashes: null,
  auth: null,
  host: null,
  port: null,
  hostname: null,
  hash: null,
  search: '?a=1&b=2',
  query: 'a=1&b=2',
  pathname: '/getmsg',
  path: '/getmsg?a=1&b=2',
  href: '/getmsg?a=1&b=2'
}

通过JSON.stringify()吧json数据转为字符串格式,并显示在页面上。

if (pathName === '/sendMsg') {
        res.end(JSON.stringify(parseObj.query));
 } 

4.文档的引入和抛出

1.exports

使用require引入文件,在另一个js文件中使用exports抛出。
注:exports只能单个抛出。
a.js

var b = require('./b');
console.log(b);

b.js

var str = 'This is b str';
var str_no2 = 'This is b str_no2';
exports.str = str;
exports.str_no2 = str_no2;

输出返回一个对象
在这里插入图片描述

2.module.exports

使用require引入文件,在另一个js文件中使用module.exports抛出。
注:module.exports可以多个一起抛出。
a.js

var b = require('./b');
console.log(b);

b.js

var str = 'This is b str';
var str2 = 'This is b str2';
module.exports = { str, str2 };

在这里插入图片描述

5.Express框架

原生的 http在某些方面表现不足以应对我们的开发需求,所以我们就需要使用框架来加快我们的开发效率,框架的目的就是提高效率,让我们的代码更高度统一。

下载

在文件中输入 npm init -y(这样可以跳过向导直接生产) ,文档中会多出来一个package.json的文件,用来存放自己下载安装过的包。
然后打开命令提示块输入

npm intsall express --save

下载框架

基本使用

直接引入express,发送请求只需要后面加上get/post即可。

var express = require('express');
var app = express();

app.get('/', (req, res) => {
    res.send('hello express');
});

app.get('/getMsg', (req, res) => {
    arr = [
        { name: '哈哈', age: 18 },
        { name: '嘻嘻', age: 20 }
    ];
    res.send(arr);
});

app.listen(3000, () => {
    console.log('http://127.0.0.1');
});

request 和 response 对象的具体介绍:

Request 对象 - request 对象表示 HTTP 请求,包含了请求查询字符串,参数,内容,HTTP 头部等属性。常见属性有:

1.req.app:当callback为外部文件时,用req.app访问express的实例
2.req.baseUrl:获取路由当前安装的URL路径
3.req.body / req.cookies:获得「请求主体」/ Cookies
4.req.fresh / req.stale:判断请求是否还「新鲜」
5.req.hostname / req.ip:获取主机名和IP地址
6.req.originalUrl:获取原始请求URL
7.req.params:获取路由的parameters
8.req.path:获取请求路径
9.req.protocol:获取协议类型
10.req.query:获取URL的查询参数串
11.req.route:获取当前匹配的路由
12.req.subdomains:获取子域名
13.req.accepts():检查可接受的请求的文档类型
14.req.acceptsCharsets / req.acceptsEncodings / req.acceptsLanguages:返回指定字符集的第一个可接受字符编码
15.req.get():获取指定的HTTP请求头
16.req.is():判断请求头Content-Type的MIME类型

Response 对象 - response 对象表示 HTTP 响应,即在接收到请求时向客户端发送的 HTTP 响应数据。常见属性有:

1.res.app:同req.app一样
2.res.append():追加指定HTTP头
3.res.set()在res.append()后将重置之前设置的头
4.res.cookie(name,value [,option]):设置Cookie
5.opition: domain / expires / httpOnly / maxAge / path / secure / signed
6.res.clearCookie():清除Cookie
7.res.download():传送指定路径的文件
8.res.get():返回指定的HTTP头
9.res.json():传送JSON响应
10.res.jsonp():传送JSONP响应
11.res.location():只设置响应的Location HTTP头,不设置状态码或者close response
12.res.redirect():设置响应的Location HTTP头,并且设置状态码302
13.res.render(view,[locals],callback):渲染一个view,同时向callback传递渲染后的字符串,如果在渲染过程中有错误发生next(err)将会被自动调用。callback将会被传入一个可能发生的错误以及渲染后的页面,这样就不会自动输出了。
14.res.send():传送HTTP响应
15.res.sendFile(path [,options] [,fn]):传送指定路径的文件 -会自动根据文件extension设定Content-Type
16.res.set():设置HTTP头,传入object可以一次设置多个头
17.res.status():设置HTTP状态码
18.res.type():设置Content-Type的MIME类型

利用 Express 托管静态文件

Express 提供了内置的中间件 express.static 来设置静态文件如:图片, CSS, JavaScript 等。
你可以使用 express.static 中间件来设置静态文件路径。例如,如果你将图片, CSS, JavaScript 文件放在 public 目录下,你可以这么写:
1.引入静态文件目录

app.use(express.static('./pubilc/'));

2.目录结构如下图
在这里插入图片描述
3.在浏览器输入,即可访问到
http://127.0.0.1/css/a.css
在这里插入图片描述

修改完代码自动重启服务器

nodemon是基于Node开发的第三方命名航工具,能解决频繁修改代码重启服务器问题
下载方法(直接在全局安装即可):

npm install --golbal nodemon  
npm i -g nodemon 

安装完之后:

nodemon app.js

验证是否安装成功:

nodemon --version  
nodemon -v

重定向问题

原来不使用框架重定向需要这么写:

res.statusCode = 302;
res.setHeader('Location', '/');

现在使用express框架只需一步即可:

res.redicect('/');

Get/post请求获取参数

1.get请求获取参数

app.get(’/get, (req, res) => {
res.send(res.query);
});

2.post请求获得参数

Express没有内置获取post请求参数的api需要下载一个包:bode-parser

安装

npm install --save body-parser

在app.js中引入并且配置

var bodyParser = require('body-parser')
//配置body-parser插件(解析post请求参数)
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: false }))
//然后调用即可req下面的body即可
app.post('/getPost', (req, res) => {
    res.setHeader('Access-Control-Allow-Origin', '*') //跨域
    console.log(req.body)
    res.send(req.body)
})

打印输出可以看的里面包含传过来的参数
在这里插入图片描述

6.express模板语法的基本使用

下载插件

npm install --save express-art-template

文件目录
页面统一放在views文件夹下面,没有就建一个。
views为页面的默认目录。
在这里插入图片描述

修改目录路径

app.set("view",文件路径)

引入插件

const express = require('express');
const app = express();
app.engine('html', require('express-art-template'));
const port = 80;
app.get('/', (req, res) => {
    res.render('404.html', {
        title: '你访问的页面已丢失404~'
    });
});
app.listen(port, () => console.log(`http://127.0.0.1`));

在页面中使用

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <title>Document</title>
    </head>
    <body>
        <div>{{title}}</div>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hope°

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值