(一) 第一个 node 应用

  1. 新建 app.js,代码如下
  1. var http = require('http');
  2. http.createServer(function (request, response) {
  3. // 发送 HTTP 头部
  4. // HTTP 状态值: 200 : OK
  5. // 内容类型: text/plain
  6. response.writeHead(200, {
  7. 'Content-Type': 'text/plain'
  8. });
  9. response.end('Hello World');
  10. }).listen(8888);
  11. // 终端打印如下信息
  12. console.log('Server running at http://127.0.0.1:8888/');
  1. 启动服务
  1. node app.js

(二) nodejs 的模块系统

1. nodejs模块系统介绍

一个js文件就是一个模块, 一个模块会有一些变量或者方法,可以导出这些变量或者方法提供给别的模块进行使用, 它也可以导入别的模块或者方法来使用

2. 导出模块和导入模块

// 例子1

  1. // m1.js, 导出一个数组, 导出使用module.exports
  2. module.exports = [1,2,3];
  3. // index1.js 导入m1模块, 导入用 require(模块路径)
  4. let list = require('./m1');
  5. console.log(list);
  6. // 运行index1.js
  7. node index1.js

// 例子2

  1. // m2.js 导出一个函数
  2. function add(a,b) {
  3. return a+b;
  4. }
  5. module.exports = add;
  6. // index2.js 导入m2模块
  7. let add = require('./m2');
  8. // 调用m2中的add方法
  9. let sum = add(100, 200);
  10. console.log('sum', sum);
  11. // 运行 index2.js
  12. node index2.js

// 例子3

  1. // m3.js 导出一个对象
  2. var username = '张三';
  3. var age = 100;
  4. function say() {
  5. console.log('我是' + username);
  6. }
  7. module.exports = {
  8. username: username,
  9. age: age,
  10. say: say
  11. }
  12. // index3.js 导入m3模块
  13. let obj = require('./m3');
  14. console.log('用户名', obj.username);
  15. obj.say();
  16. // 运行 index3.js
  17. node index3.js

(三) 文件系统

  1. 读取文件 ```javascript // 例子1 异步读取文件内容, 需要新建nput.txt文件, 内容随意 // index1.js var fs = require(“fs”);

console.log(1); // 异步读取 fs.readFile(‘input.txt’, function(err, data) { console.log(2); if (err) { return console.error(err); } else { console.log(“异步读取: “ + data.toString()); }

}); console.log(3);

  1. ```javascript
  2. // 例子2 新建index2.js, 同步读取文件内容
  3. var fs = require('fs');
  4. // 同步读取
  5. var data = fs.readFileSync('input.txt');
  6. console.log("同步读取: " + data.toString());
  7. console.log("程序执行完毕。");
  1. 写入文件 ```javascript // 例子1 异步写入文件内容 var fs = require(“fs”);

console.log(“准备写入文件”); var str = ‘困难是我们的食物’;

fs.writeFile(‘data.txt’, str, function (err) { if (err) { return console.error(err); } console.log(‘文件写入成功’) });

  1. ```javascript
  2. // 例子2 同步读取
  3. var fs = require("fs");
  4. var str = '困难是我们的食物';
  5. fs.writeFileSync('data.txt', str);
  6. console.log('文件写入成功');
  7. // 添加trycatch可以捕捉写入过程中发生的错误
  8. try {
  9. fs.writeFileSync('data.txt', str);
  10. console.log('文件写入成功');
  11. } catch (error) {
  12. console.log('错误信息', error);
  13. }

(四) nodejs原生路由

路由介绍: 路由字面意思是”途经”, 路途经过什么地方的意思,没有两个地方的风景是一样, 所以你经过不同的地方, 看到的风景是不一样的,网站上的路由也类似这样的意思, 你访问不同的url, 那么你看到的东西也是不一样的。

  1. // app.js nodejs原生路由简单例子
  2. var http = require("http");
  3. var fs = require("fs");
  4. http
  5. .createServer((req, res) => {
  6. switch (req.url) {
  7. case "/hello":
  8. res.write("hello");
  9. res.end();
  10. break;
  11. case "/hehe":
  12. res.write("hehe");
  13. res.end();
  14. break;
  15. case "/my":
  16. // 新建data.json文件,里面写一些json数据
  17. fs.readFile("data.json", (error, data) => {
  18. if (error) throw error;
  19. res.write(data);
  20. res.end();
  21. });
  22. break;
  23. default:
  24. res.write("this is home");
  25. res.end();
  26. break;
  27. }
  28. })
  29. .listen(3000, "localhost", () => {
  30. console.log("服务器运行在:http://localhost:3000");
  31. });
  1. // 运行代码
  2. node app.js
  3. // 访问以下地址看看有什么不一样
  4. http://localhost:3000/hello
  5. http://localhost:3000/hehe
  6. http://localhost:3000/my
  7. http://localhost:3000

(五) path模块

path模块介绍: nodejs自带的模块, 主要用来解决路径相关问题

  1. path.join(),因为window和linux系统分割符不一致,join可以解决这个问题
  1. let path = require('path')
  2. let str1 = path.join('/nodejs','dist');
  3. console.log(str1); // /nodejs/dist
  4. let str2 = path.join('\\nodejs','dist');
  5. console.log(str2); // /nodejs/dist
  1. path.resolve 把路径变成绝对路径
  1. let path = require('path')
  2. let str = path.resolvepath.resolve('nodejs','dist');
  3. console.log(str); // C:\Users\Administrator\Desktop\web04\nodejs\path\nodejs\dist
  1. __dirname 当前目录
  1. let path = require('path');
  2. console.log(__dirname);
  3. let str = path.resolve(__dirname,'dist');
  4. console.log('str',str);

(六) npm 工具

  1. npm 是什么
    • 前端通用的模块都存放在网站 https://www.npmjs.com/, 你需要用到nodejs模块在这个网站都能找到
    • npm 是 nodejs 模块 (一般称为包,一个模块就是一个包) 管理工具
  2. 初始化 package.json

    1. npm init // 或
    2. npm init -y
  3. 安装一个 nodejs 模块

    1. // 以jquery和axios为例,安装用npm install(简写i)
    2. npm i jquery --save /// 记录在 dependencies
    3. npm i axios --save-dev // 记录devDependencies
    4. npm i serve -g // 全局安装,serve是一个封装了nodejs服务的模块
    5. npm i // 当我们把node_modules删掉,使用npm i 可以把所有依赖都安装回来
  4. // dependency和devDependencies的区别

    1. (1) 使用 --save-dev 安装的 插件,被写入到 devDependencies 域里面去,而使用 --save 安装的插件,则是被写入到 dependencies 区块里面去。
    2. (2) 官方解释
    3. dependency”:These packages are required by your application in production.(这些软件包是生产中的应用程序需要的)
    4. devDependencies”: These packages are only needed for development and testing.(这些包仅用于开发和测试)
    5. (3) package.json 文件里面的 devDependencies dependencies 的区别
    6. devDependencies 里面的插件只用于开发环境,不用于生产环境,而dependencies是需要发布到生产环境的。比如我们写一个项目要依赖于jQuery,没有这个包的依赖运行就会报错,这时候就把这个依赖写入dependencies;而我们使用的一些构建工具比如glupwebpack这些只是在开发中使用的包,上线以后就和他们没关系了,所以将它写入devDependencies
  5. 更新 nodejs 模块

    1. npm update xxx
    1. 删除 nodejs 模块

      1. npm uninstall xxx
    2. 运行指令 (运行package.json里script里的指令)

      1. npm run xxx

(七) 设置淘宝镜像

(1) 输入以下命令

  1. npm config set registry https://registry.npm.taobao.org

(2) 验证

  1. npm config get registry

(3) 如果返回https://registry.npm.taobao.org,说明镜像配置成功。
(4) nrm模块也可以帮助我们进行镜像的切换

  1. npm i nrm -g // 全局安装nrm模块
  2. nrm ls // ls查看可用镜像
  3. nrm use xxx // 使用镜像

(八) nodejs版本切换

  1. 下载安装 nvm
  1. https://nvm.en.softonic.com/
  1. nvm命令
  1. nvm // 会提示nvw下的相关命令
  2. nvm ls // 查看已安装node版本
  3. nvm install 10 // 安装对应10.0版本的node
  4. nvm uninstall 10 // 卸载对应10.0版本的node
  5. nvm use xxx // 选择使用XXX版本

(九) 服务器自动重启

  1. 全局安装nodemon

    1. npm i nodemon -g
  2. 运行node app.js需要使用nodemon app.js来代替

  3. 示例: 新建app.js, 然后执行 nodemon app.js, 然后修改输出内容试试
  1. var http = require('http');
  2. http.createServer(function (request, response) {
  3. // 发送 HTTP 头部
  4. // HTTP 状态值: 200 : OK
  5. // 内容类型: text/plain
  6. response.writeHead(200, {
  7. 'Content-Type': 'text/plain'
  8. });
  9. response.end('Hello World');
  10. }).listen(8888);
  11. // 终端打印如下信息
  12. console.log('Server running at http://127.0.0.1:8888/');

(十) 调试代码

参考链接: https://www.ruanyifeng.com/blog/2018/03/node-debugger.html

最简单的一种方法:

  1. 执行nodemon app.js时添加--inspect

    1. nodemon --inspect app.js
  2. 执行以上命令之后, 打开控制台, 左上角有个绿色的按钮, 点击它会弹出一个控制台

  3. 快捷键ctrl+p, 然后输入app.js, 接下来的事情就跟调试前端代码一样了