一、http模塊、url模塊
//引用模塊
const http = require('http');
const url = require('url');
// 發(fā)送 HTTP 頭部
// HTTP 狀態(tài)值: 200 : OK
// 設(shè)置 HTTP 頭部,狀態(tài)碼是 200,文件類型是 html,字符集是 utf8
http.createServer((req,res)=>{
res.writeHead(200,{"Content-type": "text/html;charset=utf-8"}); // 解決亂碼
console.log(req.url);
if(req.url !== "/favicon.ico"){
// url.parse() 解析 URL
// url.format(urlObject) //是上面 url.parse() 操作的逆向操作
// url.resolve(from, to) 添加或者替換地址
var getValue = url.parse(req.url,true).query;
console.log(getValue);
console.log(`姓名: ${getValue.name}, 年齡: ${getValue.age}`);
res.write(`姓名: ${getValue.name}, 年齡: ${getValue.age}`)
}
res.end()
// end 方法使 Web 服務(wù)器停止處理腳本并返回當(dāng)前結(jié)果
}).listen(3000)
url.parse()第二個(gè)參數(shù)加true與不加true的區(qū)別
const url = require('url')
let src = 'www.baidu.com?name=zhangsan&age=18'
url.parse(src)
/*
{
protocol: null,
slashes: null,
auth: null,
host: null,
port: null,
hostname: null,
hash: null,
search: '?name=zhangsan&age=18',
query: 'name=zhangsan&age=18',
pathname: 'www.baidu.com',
path: 'www.baidu.com?name=zhangsan&age=18',
href: 'www.baidu.com?name=zhangsan&age=18'
}
*/
url.parse(src,true)
/*
{
protocol: null,
slashes: null,
auth: null,
host: null,
port: null,
hostname: null,
hash: null,
search: '?name=zhangsan&age=18',
query: [Object: null prototype] { name: 'zhangsan', age: '18' },
pathname: 'www.baidu.com',
path: 'www.baidu.com?name=zhangsan&age=18',
href: 'www.baidu.com?name=zhangsan&age=18'
}
*/
二、自動重啟服務(wù)工具
Node.js中的代碼修改之后自動重啟服務(wù)可以使用的工具有:
nodemon, supervisor
安裝
nodemon
npm i -g nodemon
supervisor
npm i -g supervisor
使用
supervisor
supervisor index.js
nodemon
nodemon index.js
Node.js中有兩類模塊,一類是 Node 提供的模塊,稱為核心模塊;另一類是用戶編寫的模塊,稱為文件模塊。
三、自定義模塊
使用require 和exports操作自定義模塊
exports導(dǎo)出一個(gè)自定義模塊時(shí)
const obj = {}
module.exports = obj
const a = function(){}
exports.a = a;
**在使用require時(shí)引入一個(gè)自定義模塊時(shí)會根據(jù)提供的文件路徑獲取自定義模塊,如果沒有寫文件路徑而是直接寫模塊的名稱則會從node_modules文件夾中查找模塊,如果該模塊目錄中存在index.js文件就可以直接調(diào)用,如果該模塊中不存在index.js文件則會報(bào)錯(cuò)。如何想使用非index.js文件作為入口文件,在該模塊目錄下 npm init 生成 package.json進(jìn)行配置 **
const dp = require('dp')
一般的自定義模塊的導(dǎo)出分為exports和module.exports
新建exportsMethod.js文件,在里面編寫如下代碼
const obj = {
get: function () {
console.log('這是一個(gè)get函數(shù)')
},
post: function () {
console.log('這是一個(gè)post函數(shù)')
}
}
// exports.xxxx = obj;
module.exports = obj;
新建一個(gè)index.js文件
里面對exportsMethod中的內(nèi)容進(jìn)行require
var req = require('./exportsMethod')
console.log(req);
// exports.xxxx = obj;
// { xxxx: { get: [Function: get], post: [Function: post] } }
// module.exports = obj;
// { get: [Function: get], post: [Function: post] }
四、NPM包管理
- 常見的npm指令
-
npm init [-y]: 初始化一個(gè)package.json文件; -
npm install 包名: 安裝一個(gè)包; -
npm install --save 包名: 將安裝的包添加到package.json的依賴中(dependencies); -
npm install -g 包名: 全局安裝一個(gè)包; -
npm docs 包名: 查看包的文檔; -
npm root -g: 查看全局包的安裝路徑; -
npm config set prefix "路徑": 修改全局包安裝路徑; -
npm list: 查看當(dāng)前目錄下安裝的所有包; -
npm list -g: 查看全局包的安裝路徑下所有的包; -
npm uninstall 包名: 卸載當(dāng)前目錄下某個(gè)包; -
npm uninstall -g 包名: 卸載全局安裝路徑下的某個(gè)包; -
npm update 包名: 更新當(dāng)前目錄下的某個(gè)包;
初始化一個(gè)項(xiàng)目需要使用npm init指令,運(yùn)行此命令后會自動生成一個(gè)package.json文件,該文件中包含一些鍵值對。

- npm安裝指定版本的包使用@
npm install node-media-server@2.1.0
package.json文件中的dependencies中的包的版本號的規(guī)則如下
^:表示第1、2位版本號不變,最后一位取最新的
~: 表示第1位版本號不變,后面兩位取最新的
*:表示所有的版本號取最新的
- npm、cnpm、yarn的基本指令比較
功能 NPM CNPM YARN
初始化某個(gè)項(xiàng)目 npm init cnpm init yarn init
默認(rèn)安裝依賴操作 npm install/link cnpm install/link yarn install/link
安裝某個(gè)依賴 npm install taco -s cnpm install taco -s yarn add taco
并保存到package.json
移除某個(gè)依賴項(xiàng)目 npm uninstall taco -s cnpm uninstall taco -s yarn remove taco
安裝某個(gè)開發(fā)時(shí)依賴項(xiàng)目 npm install taco -save-dev cnpm install taco -save-dev yarn add taco -dev
更新某個(gè)依賴項(xiàng)目 npm update taco -s cnpm update taco -s yarn upgrade taco
安裝某個(gè)全局依賴項(xiàng)目 npm install taco -g cnpm install taco -g yarn global add taco
發(fā)布/登錄/登出 npm publish/login/logout cnpm publish/login/logout yarn ublish/login/logout
運(yùn)行某個(gè)命令 npm run/test cnpm run/test yarn run/test