包含fs、path、http完整服务器实例
const http = require('http');
const fs = require('fs');
const path = require('path');

const server = http.createServer();
server.on('request',(req,res)=>{
    const url = req.url;
    const method = req.method;
    // const fpath = path.join(__dirname,url);
    let fpath='';
    if(url === '/'){
        fpath = path.join(__dirname,'./clock/index.html');
    }else{
        fpath = path.join(__dirname,'/clock',url);
    }
    fs.readFile(fpath,'utf-8',(err,dataStr)=>{
        if(err) return res.end('404 not found');
        res.end();
    })
})
server.listen(80,()=>{
    console.log()
})

模块化

模块作用域

变量、方法只能在当前模块内被访问,被称为模块级别的访问限制。

防止全局变量污染的问题。

向外共享模块作用域中的成员

1、module对象

存储了和当前模块有关的信息。

2、module.exports

可以使用此方法将模块内的成员共享出去。

//module.exports
//例
const m = require('./node-02')
console.log(m)
//打印的m中存储了require文件中exports 的方法。

//向exports对象上挂载方法和属性
let age = 20;
module.exports.age = age;
module.exports.username = 'zs';
module.exports.sayHello = function () {
}
//或
module.exports = {
}

require获取模块时,得到的是module.exports指向的对象。

npm与包

包是基于内置模块封装出来的,提供了更高级、更方便的API,极大的提高了开发效率

安装包

npm install 包完整名称
npm unintsall 包完整名称 //卸载包

例如,使用moment包

const moment = require('moment')

const dt = moment().format('YYYY-MM-DD HH:mm:ss')

console.log(dt)

包管理配置文件

npm规定在项目根目录中,必须提供一个叫做package.json的包管理配置文件。用力啊记录与项目有关的一些配置信息。

注意在项目开发中一定要把node_modules文件夹添加到.gitignore文件中

快速创建package.json

npm init -y

devDependencies节点

如果某些包只在项目开发阶段会用到,在项目上线之后不会用到,则建议吧这些包记录到devDependencies节点中。与之对应的,如果某些包在开发和项目上线之后都需要用到,则建议把这些包记录到dependencies节点中

npm install -D 包完整名称 	//安装到devDependencies节点中
npm install -d 包完整名称 	//安装到dependencies节点中