报错警告
npm ERR! code EINVALIDTAGNAME
原因
没有进行npm init便开始安装包。
注意事项
这里我们需要注意的是npm init和npm i并不相同,npm i 代表的是npm install表示安装,并不表示初始化,初始化需要我们npm init这个命令不能够简写。
npm ERR! code EINVALIDTAGNAME
没有进行npm init便开始安装包。
这里我们需要注意的是npm init和npm i并不相同,npm i 代表的是npm install表示安装,并不表示初始化,初始化需要我们npm init这个命令不能够简写。
一个HTML表单要想点击button按钮就能够提交数据,必须具备以下几个要素:
- 表单要有action属性,这个属性是告知浏览器要将数据发送到哪里。
- 每一个输入框要有name属性,这个属性是帮助我们定位输入的是什么的。
- button的type属性要是submit.
<form action="/pinglun" method="get">
<div class="form-group">
<label for="input_name">你的大名</label>
<input type="text" class="form-control" required minlength="2" maxlength="10" id="input_name"
name="name" placeholder="请写入你的姓名">
</div>
<div class="form-group">
<label for="textarea_message">留言内容</label>
<textarea class="form-control" name="message" id="textarea_message" cols="30" rows="10" required
minlength="5" maxlength="20"></textarea>
</div>
<button type="submit" class="btn btn-default">发表</button>
</form>
const urlParse = require('url')
const parseObj = urlParse.parse(url,true);
const pathname = parseObj.pathname;
parseObj.query
res.statusCode = 302;
res.setHeader('Location','/');
使用这种暴露方式,暴露的是一个对象,我们以下面的例子进行举例说明:
const test = require('./b');
console.log(test);
const foo = '你好';
exports.foo = foo;
我们对a进行调用,输出结果如下所示
{ foo: '你好' }
const test = require('./b');
console.log(test);
const foo = '你好';
module.exports = foo;
对a.js进行调用,输出结果如下所示:
你好
node中实际暴露的是module.exports这个对象,你给这个对象赋值,返回的就是值,你给对象添加属性,返回的就是含有属性的对象。
文件结构
实现代码
const fs = require('fs');
fs.readdir('G:/pink_code/Node_Study/02',(err,list) => { if (!err) { console.log(list); } })
>代码输出
```js
[ '01_http-helloWorld.js', '02_使用readdir获取指定路径下的所有文件名.js', 'www' ]
npm install art-template
<script src="./node_modules/art-template/lib/template-web.js"></script>
<script src="./node_modules/art-template/lib/template-web.js"></script>
<script type='text/template' id = 'tpl'>
这是{{name}}
</script>
<script>
const test = template('tpl',{
name: 'China'
});
console.log(test);
</script>
npm install art-template
在Node中使用模板引擎的一个小案例
const template = require('art-template');
const test = template.render('hello {{name}}',{
name: 'NodeJs'
})
console.log(test);
输出结果
hello NodeJs
<html dir="ltr" lang="zh">
<head>
<meta charset="utf-8">
<meta name="google" value="notranslate">
<style>
h1 {
border-bottom: 1px solid #c0c0c0;
margin-bottom: 10px;
padding-bottom: 10px;
white-space: nowrap;
}
table {
border-collapse: collapse;
}
th {
cursor: pointer;
}
td.detailsColumn {
-webkit-padding-start: 2em;
text-align: end;
white-space: nowrap;
}
a.icon {
-webkit-padding-start: 1.5em;
text-decoration: none;
user-select: auto;
}
a.icon:hover {
text-decoration: underline;
}
a.file {
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABnRSTlMAAAAAAABupgeRAAABHUlEQVR42o2RMW7DIBiF3498iHRJD5JKHurL+CRVBp+i2T16tTynF2gO0KSb5ZrBBl4HHDBuK/WXACH4eO9/CAAAbdvijzLGNE1TVZXfZuHg6XCAQESAZXbOKaXO57eiKG6ft9PrKQIkCQqFoIiQFBGlFIB5nvM8t9aOX2Nd18oDzjnPgCDpn/BH4zh2XZdlWVmWiUK4IgCBoFMUz9eP6zRN75cLgEQhcmTQIbl72O0f9865qLAAsURAAgKBJKEtgLXWvyjLuFsThCSstb8rBCaAQhDYWgIZ7myM+TUBjDHrHlZcbMYYk34cN0YSLcgS+wL0fe9TXDMbY33fR2AYBvyQ8L0Gk8MwREBrTfKe4TpTzwhArXWi8HI84h/1DfwI5mhxJamFAAAAAElFTkSuQmCC ") left top no-repeat;
}
a.dir {
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAd5JREFUeNqMU79rFUEQ/vbuodFEEkzAImBpkUabFP4ldpaJhZXYm/RiZWsv/hkWFglBUyTIgyAIIfgIRjHv3r39MePM7N3LcbxAFvZ2b2bn22/mm3XMjF+HL3YW7q28YSIw8mBKoBihhhgCsoORot9d3/ywg3YowMXwNde/PzGnk2vn6PitrT+/PGeNaecg4+qNY3D43vy16A5wDDd4Aqg/ngmrjl/GoN0U5V1QquHQG3q+TPDVhVwyBffcmQGJmSVfyZk7R3SngI4JKfwDJ2+05zIg8gbiereTZRHhJ5KCMOwDFLjhoBTn2g0ghagfKeIYJDPFyibJVBtTREwq60SpYvh5++PpwatHsxSm9QRLSQpEVSd7/TYJUb49TX7gztpjjEffnoVw66+Ytovs14Yp7HaKmUXeX9rKUoMoLNW3srqI5fWn8JejrVkK0QcrkFLOgS39yoKUQe292WJ1guUHG8K2o8K00oO1BTvXoW4yasclUTgZYJY9aFNfAThX5CZRmczAV52oAPoupHhWRIUUAOoyUIlYVaAa/VbLbyiZUiyFbjQFNwiZQSGl4IDy9sO5Wrty0QLKhdZPxmgGcDo8ejn+c/6eiK9poz15Kw7Dr/vN/z6W7q++091/AQYA5mZ8GYJ9K0AAAAAASUVORK5CYII= ") left top no-repeat;
}
a.up {
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmlJREFUeNpsU0toU0EUPfPysx/tTxuDH9SCWhUDooIbd7oRUUTMouqi2iIoCO6lceHWhegy4EJFinWjrlQUpVm0IIoFpVDEIthm0dpikpf3ZuZ6Z94nrXhhMjM3c8895977BBHB2PznK8WPtDgyWH5q77cPH8PpdXuhpQT4ifR9u5sfJb1bmw6VivahATDrxcRZ2njfoaMv+2j7mLDn93MPiNRMvGbL18L9IpF8h9/TN+EYkMffSiOXJ5+hkD+PdqcLpICWHOHc2CC+LEyA/K+cKQMnlQHJX8wqYG3MAJy88Wa4OLDvEqAEOpJd0LxHIMdHBziowSwVlF8D6QaicK01krw/JynwcKoEwZczewroTvZirlKJs5CqQ5CG8pb57FnJUA0LYCXMX5fibd+p8LWDDemcPZbzQyjvH+Ki1TlIciElA7ghwLKV4kRZstt2sANWRjYTAGzuP2hXZFpJ/GsxgGJ0ox1aoFWsDXyyxqCs26+ydmagFN/rRjymJ1898bzGzmQE0HCZpmk5A0RFIv8Pn0WYPsiu6t/Rsj6PauVTwffTSzGAGZhUG2F06hEc9ibS7OPMNp6ErYFlKavo7MkhmTqCxZ/jwzGA9Hx82H2BZSw1NTN9Gx8ycHkajU/7M+jInsDC7DiaEmo1bNl1AMr9ASFgqVu9MCTIzoGUimXVAnnaN0PdBBDCCYbEtMk6wkpQwIG0sn0PQIUF4GsTwLSIFKNqF6DVrQq+IWVrQDxAYQC/1SsYOI4pOxKZrfifiUSbDUisif7XlpGIPufXd/uvdvZm760M0no1FZcnrzUdjw7au3vu/BVgAFLXeuTxhTXVAAAAAElFTkSuQmCC ") left top no-repeat;
}
html[dir=rtl] a {
background-position-x: right;
}
#parentDirLinkBox {
margin-bottom: 10px;
padding-bottom: 10px;
}
#listingParsingErrorBox {
border: 1px solid black;
background: #fae691;
padding: 10px;
display: none;
}
</style>
<title id="title">C:\Users\HP\Desktop\共享文件\ 的索引</title>
</head>
<body>
<div id="listingParsingErrorBox">糟糕!Google Chrome无法解读服务器所发送的数据。请<a
href="http://code.google.com/p/chromium/issues/entry">报告错误</a>,并附上<a href="LOCATION">原始列表</a>。</div>
<h1 id="header">C:\Users\HP\Desktop\共享文件\ 的索引</h1>
<div id="parentDirLinkBox" style="display: block;">
<a id="parentDirLink" class="icon up" href="/C:/Users/HP/Desktop/%E5%85%B1%E4%BA%AB%E6%96%87%E4%BB%B6/..">
<span id="parentDirText">[上级目录]</span>
</a>
</div>
<table>
<thead>
<tr class="header" id="theader">
<th id="nameColumnHeader" tabindex="0" role="button">名称</th>
<th id="sizeColumnHeader" class="detailsColumn" tabindex="0" role="button">
大小
</th>
<th id="dateColumnHeader" class="detailsColumn" tabindex="0" role="button">
修改日期
</th>
</tr>
</thead>
<tbody id="tbody">
{{each files}}
<tr>
<td data-value="{{$value}}"><a class="icon file" draggable="true" href="{{$value}}">{{$value}}</a>
</td>
<td class="detailsColumn" data-value="193955">189 kB</td>
<td class="detailsColumn" data-value="1627464963">2021/7/28 下午5:36:03</td>
</tr>
{{/each}}
</tbody>
</table>
</body>
</html>
const http = require('http');
const template = require('art-template');
const fs = require('fs');
const server = http.createServer();
server.on('request', (req, res) => {
const url = req.url;
// 文件路径
const filePath = 'G:/pink_code/Node_Study/02';
// 获取文件路径下所有的文件名
let listName;
fs.readdir(filePath, (err, list) => {
if (!err) {
listName = list;
}
})
// 读取模板文件内容
fs.readFile('./www/template.html', (err, data) => {
if (!err) {
data = data.toString();
test = template.render(data,{
files: listName
})
res.end(test);
} else {
console.log('读取文件出错', err);
}
});
})
// 监听3000端口
server.listen(3000, (err) => {
if (!err) {
console.log('服务器启动成功!');
}
})
require加载文件是运行到该位置才加载,请看下面的一段代码 a.js
console.log('a开始执行了');
require('./b');
console.log('a 执行结束了');
**b.js**
```js
console.log('b执行结束');
执行结果
请看下面的两端代码 a.js
var a = '777'
console.log('a开始执行了');
require('./b');
console.log('a 执行结束了');
console.log('a的值是:',a);
b.js
var a = '666'
console.log('b执行结束');
执行结果
exports其实是一个空对象,我们相当于向这个空对象中添加元素,然后进行暴露。 a.js
const test = require('./b');
console.log(test.a);
**b.js**
```js
var a = '666'
exports.a = a;
node运行 a.js
服务器直接返回中文,在浏览器上显示的是乱码,所以我们可以通过设置setHeader中的编码格式来解决这一问题。
server.on('request',(req,res) => {
res.setHeader('Content-Type','text/plain; charset=utf-8');
res.end('Node,你好');
})
Content-Type就是用来告知对方发送的数据内容是什么类型的。下面我们将给出Content-Type的例子
例子:设置为普通文本类型(plain)与html类型的
server.on('request',(req,res) => {
const url = req.url;
if (url === '/plain') {
res.setHeader('Content-Type','text/plain; charset=utf-8');
res.end('这是中文哦!');
} else if (url === '/html') {
res.end('<h1>你好这是一级标题</h1');
}
})
浏览器会默认将html的字符串解析为HTML代码,如果我们想要的不是HTML代码而是字符串,可以通过设置setHeader为text/plain;
关于Node是什么,以及如何安装node等基础知识,本系列文章便不再赘述,本专栏的特点是只讲干货,从零基础开始学习NodeJs.
console.log(window);
console.log(document);
我们通过node命令运行上面的代码是会报错的。
fs是file-system的简写,是文件系统的意思,在Node中如果想要进行文件操作,就必须引入fs这个核心模块,在fs这个核心模块中,提供了操作文件的相关API,例如fs.readFile就是用来读取文件的。
const fs = require('fs');
fs.readFile('./readme.md',(err,data) => { if (!err) { console.log(data.toString()); } })

## 使用Node创建基础的HTTP服务
```js
// 1. 加载http核心模块
const http = require('http');
// 2. 创建服务器实例
const server = http.createServer();
// 3. 注册request请求事件
server.on('request',(request,response) => {
console.log('服务器端收到请求');
console.log('客户端的请求路径是:',request.url);
response.write('<h1>Hello,Node!</h1>');
// response.end();
if (request.usr = '/index') {
response.write('666');
}
response.end();
})
// 4. 绑定端口号,启动服务器
server.listen(3000,() => {
console.log('服务器启动成功');
});
const http = require('http');
// 1. 创建服务器实例
const server = http.createServer();
// 2. 监听请求事件,设置请求处理函数
server.on('request',(request,response) => {
if (request.url === '/index') {
// response.write('666666');
}
const test = [{name: 'justin',phone: '11'}];
response.end(JSON.stringify(test));
})
// 3. 监听指定端口
server.listen(3000,() => {
console.log('服务器启动成功!');
})
const os = require('os');
console.log(os.cpus());
[
{
model: 'Intel(R) Core(TM) i5-6300HQ CPU @ 2.30GHz',
speed: 2304,
times: {
user: 1780218,
nice: 0,
sys: 2250343,
idle: 24643734,
irq: 617593
}
},
{
model: 'Intel(R) Core(TM) i5-6300HQ CPU @ 2.30GHz',
speed: 2304,
times: {
user: 1810000,
nice: 0,
sys: 1999546,
idle: 24864125,
irq: 370703
}
},
{
model: 'Intel(R) Core(TM) i5-6300HQ CPU @ 2.30GHz',
speed: 2304,
times: {
user: 1855187,
nice: 0,
sys: 1691656,
idle: 25126828,
irq: 148062
}
},
{
model: 'Intel(R) Core(TM) i5-6300HQ CPU @ 2.30GHz',
speed: 2304,
times: {
user: 1898781,
nice: 0,
sys: 1538750,
idle: 25236140,
irq: 65781
}
}
]