1.介绍
Node.js是一个javascript运行环境。它让javascript可以开发后端程序,实现几乎其他后端语言实现的所有功能
Nodejs是基于V8引擎,V8是Google发布的开源JavaScript引擎,本身就是用于Chrome浏览器的js解释部分
Nodejs遵循CommonJS规范
2.nodejs的特性
Nodejs语法完全是js语法
NodeJs超强的高并发能力,实现高性能服务器
3.浏览器环境vs node环境
![](https://img-blog.csdnimg.cn/img_convert/4572538ff55742388d716fa04c1937c6.png)
4.Node.js 可以解析JS代码(没有浏览器安全级别的限制)提供很多系统级别的API
如:
文件的读写 (File System)
const fs = require('fs')
fs.readFile('./ajax.png', 'utf-8', (err, content) => {
console.log(content)
})
进程的管理 (Process)
function main(argv) {
console.log(argv)
}
main(process.argv.slice(2))
网络通信 (HTTP/HTTPS)
const http = require("http")
//创建服务器
http.createServer((req,res) => {
// req 接收浏览器传递的参数
// res 返回渲染内容
// 设置响应头,同时可以设置状态码和状态信息。 必须先设置响应头,才能设置响应。
res.writeHead(200, {
"Content-Type":"application/json;charset=utf-8",
"access-control-allow-origin":"*"
})
// res.statusCode: 响应的的状态码 200 404 500
// res.statusMessage: 响应的状态信息, OK Not Found ,会根据statusCode自动设置。
// 给浏览器的响应正文
res.write("hello nodejs")
// 给浏览器的响应正文,需配置响应头
res.write(`
<html>
<h1>hello world1</h1>
<h1>你好 世界!</h1>
</html>
`)
// 结束请求,并且响应一段内容, end下面不可再写write
res.end('[1,2,3]')
}).listen(3000,()=>{
// 启动成功执行
console.log('端口启动成功')
})
5.modules模块化规范
把公共的功能 抽离成为一个单独的 js 文件 作为一个模块,默认情况下面这个模块里面的方法或者属性,外面是没法访问的。如果要让外部可以访问模块里面的方法或者属性,就必须在模块里面通过 exports 或者 module.exports 暴露属性或者方法。
m1.js:
const name = 'huzi'
const sayName = () => {
console.log(name)
}
// 接口暴露方法一:
module.exports = {
say: sayName
}
// 接口暴露方法二:
exports.say = sayName
main.js:
const m1 = require('./m1')
m1.say()
6.模块化的好处
模块化之前使用对象和闭包 可以解决全局污染的问题
可维护性。 因为模块是独立的,一个设计良好的模块会让外面的代码对自己的依赖越少越好,这样自己就可以独立去更新和改进。
命名空间。 在 JavaScript 里面,如果一个变量在最顶级的函数之外声明,它就直接变成全局可用。因此,常常不小心出现命名冲突的情况。使用模块化开发来封装变量,可以避免污染全局环境。
重用代码。 我们有时候会喜欢从之前写过的项目中拷贝代码到新的项目,这没有问题,但是更好的方法是,通过模块引用的方式,来避免重复的代码库。我们可以在更新了模块之后,让引用了该模块的所有项目都同步更新,还能指定版本号,避免 API 变更带来的麻烦。