初步了解node.js
node.js
并不是一个框架,只是一个js语言,诞生于2009年,由 C++ 语言编写成
使 JS 脱离浏览器端,仍然是基于浏览器的
node搭建基础服务器
console.log("hello,everyone!") // 测试数据
// 引入 node模块
const http = require("http");//内置模块
// 通过模块去创建服务
// 服务器只是个本地服务器
// 必须先开启服务
const server = http.createServer((req, res) => {
res.write("1223")
res.end();
})
// 端口号 浏览器查找的依据
server.listen(3005)
启动服务
即 node 运行文件
node + 文件名.后缀
启动的服务有局限性 数据修改后需要手动重启
- 方法: 以 http.js 为例
在 电脑终端 或 编译器的集成的终端中 进入想要运行的文件所在的文件夹下
输入 node http.js ( 一个字符都不能少 )
nodemon + 文件名.后缀
自动更新保存数据
在系统上使用时没用问题的,在编译器上直接启用有可能会出错 ( 原因:没有权限 )
- 安装 nodemon 方法
npm i nodemon -g 或者 npm install nodemon -g - nodemon 运行文件 以 http.js 为例
在 电脑终端 或 编译器的集成的终端中 进入想要运行的文件所在的文件夹下
输入 nodemon http.js ( 一个字符都不能少 )
解决集成终端无法运行 nodemon 的问题
- 方法一
进入电脑的设置 => 开发人员模式 => 自动安装 - 方法二
搜索 Windows PowerShell (执行策略 管理员模式打开) => get ExecutionPolicy (查询执行状态
Restricted 表示不允许执行 RemotsSigned 表示允许执行) => set ExecutionPolicy RemotsSigned
(设置执行状态) => y (同意)
设置结束后 如果还是报错 只是编译器没有调整过来 ,重启编译器
浏览器方式查看运行的文件
开启方式有三种 ( 不可以在编译器中直接打开 )
需要打开浏览器后,修改网址
- localhost:端口号
- 127.0.0.1:端口号 ( 127.0.0.1 为计算机自带 )
- ip地址:端口号(网络状态 ipconfig查询网络)
模块化
模块化优势
- 使代码的结构更加清晰,便于后期维护
- 避免变量污染,每一个模块 都有自己独立的命名空间
- 可以按需加载, 提升性能
node模块分类
- 自定义模块
不需要安装,自定义使用,同级目录 必须加 ". / " — 位置是自定义的 - 内置模块
由 node 自带,直接导入使用即可 — 位置在 node_modules文件夹下 - 外置模块
使用 npm 通过指令按需安装 — 位置是node_modules - package.json 特殊的文件(不是模块)
对应他的上级目录,记录或者配置该文件夹的所有信息
模块化使用导出
建议按需导出,自行决定
- module.exports 导出
接收一个对象,对象中包含多个需要导出的内容,(数量不限)
let a = 10;
class Preson{
constructor(){
}
hobby(){
console.log("游泳")
}
}
//
module.exports = {
a,
Person
}
- exports.自定义名称 导出
module.exports 的引用,导出单个目标时,使用
let a = 10;
class Preson{
constructor(){
}
hobby(){
console.log("游泳")
}
}
exports.a = a;
exports.Person = Person;
模块化使用导入
以下的两种方式实际是一种导入,只是不同的接收方式
- 使用变量来保存接收到的数据
let Spa = require("./index.js");
- 直接使用解构赋值 推荐方式
let {a,Person} = require("./index");
console.log("我是被导入的" + a);
let p = new Person();
p.hobby();
JS模块和 JS文件 使用时最直观的区别
JS文件
<script src="http.js"></script>
<script src="modulA.js"></script>
- 使用时, script标签引入的是整体文件
- 需要 文件名.文件格式
- 同级目录下直接写 文件名.文件格式 即可
JS模块
require("./home")
- 使用时, require 引入的是模块中导出的部分
- 只需要模块名称即可
- 同级目录下,路径的前缀必须加 ./