nodejs

node.js是什么

node.js是一個構(gòu)建在chrme的v8引擎上的JavaScript的運(yùn)行環(huán)境(runtime)衙熔。NodeJS使用事件驅(qū)動、非阻塞I/O模型來讓程序變得輕量和方便名段。它的包管理系統(tǒng)叫做npm,是世界上最大的JavaScript包生態(tài)系統(tǒng)泣懊。

運(yùn)行環(huán)境

nodejs是一個js的運(yùn)行環(huán)境伸辟,現(xiàn)在我們有兩個js運(yùn)行環(huán)境:
? HTML配合瀏覽器
? nodejs
nodejs平臺是沒有window、body對象等等對象馍刮。

命令

1.文件夾的名字信夫,可以按tab鍵進(jìn)行補(bǔ)全:
2.node -v
返回當(dāng)前node版本
3.npm -v
返回當(dāng)前npm版本
4.npm help
查看所有命令
5.npm help command
查看某條命令的說明
6.npm list -g
返回所有全局安裝的包
7.按shift加鼠標(biāo)右鍵可以在當(dāng)前路徑打開gitbash
8.node xx.js 運(yùn)行xx.js文件

模式

  • 腳本模式
    執(zhí)行js文件
    node + 文件名稱
  • 交互模式

模塊

  1. 引用內(nèi)置模塊,直接使用require()函數(shù)獲得模塊名字就行了。
    引用自定義模塊加路徑 require("./a.js");
    入口文件index.js忙迁,可以省略
    var yuan = require("./yuan/") //等同于var yuan = require("./yuan/index.js")
    var fs = require("fs");
    var http = require("http");
  1. 在nodejs程序中脐彩,require誰就會立即執(zhí)行誰
  2. nodejs中每個js文件的作用域是隔離的
  3. 瀏覽器模式下,js文件之間是沒有作用域隔離的姊扔,因?yàn)樗械淖兞慷际莣indow對象的屬性惠奸,而window對象從屬于html文件
  4. 模塊內(nèi)的值可以作為模塊的對象暴露出去
var a=1; module.exports=a      //這種寫法適用于js文件本身是一個類
var a=1; exports.a=a      

6.在node_modules文件夾中的所有模塊,可以不寫外部路徑恰梢。
7.在require的時候佛南,如果不是用./開頭的路徑,此時nodejs會自動去node_modules中尋找嵌言。
8.在模塊中輸出變量
方法一:如果要輸出一個函數(shù)或數(shù)組嗅回,必須直接對module.exports對象賦值

function greet(name) {
    console.log('hello' + name + ' !')
}
module.exports = greet;

var greet = require('./greet.js');
greet('zhang san');

方法二:如果要輸出一個鍵值對象{},可以利用exports這個已存在的空對象{}摧茴,并繼續(xù)在上面添加新的鍵值

function getTime(){
    var d = new Date();
    return d.getFullYear() + '-' + (d.getMonth()+1) + '-' + d.getDay()
}
function getTwoLength(str){
    if ((str+'').length==1){
        return '0'+str
    }
}
exports.getTime = getTime;
exports.getTwoLength = getTwoLength;


var util = require('./util.js');
console.log(util.getTime());
console.log(util.getTwoLength(2));
var a = require("./a.js");      //相同文件夾下的a.js文件
var a = require("a.js");            //node_modules文件夾中的a.js文件
var a = require("a");               //node_modules文件夾中的a文件夾中的index.js文件

package.json

npm init 在當(dāng)前項(xiàng)目文件夾下生成 package.json
package.json的dependencies 記錄了項(xiàng)目依賴
npm install 命令一鍵安裝所有的 dependencies 里的內(nèi)容
npm install  name 在目前最新node版本,等同于npm install --save name
npm install --save name 安裝并自動記錄到依賴信息

理解異步

var fs=require('fs');
fs.readFile('./temp/test1.txt',function(err,data){
    console.log(err,data.toString())
})
console.log('哈哈')
先輸出'哈哈'绵载。因?yàn)閒s.readFile()是異步的,CPU命令磁盤驅(qū)動器去讀取文件了苛白,此時CPU沒有被阻塞娃豹,而是先執(zhí)行后面的語句。

demo

把文件1的內(nèi)容寫入到文件2购裙,注意回掉函數(shù)嵌套懂版,才能保證把讀完之后的內(nèi)容再寫入成功

var fs = require('fs');
var str;
fs.readFile('./temp/test2.txt', function (err, data) {
    if (err) { console.log('寫入失敗') } else {
        str = data.toString()
        console.log(str)
    }
    fs.writeFile('./temp/test1.txt', str, function (err, data) {
        if (err) { console.log('寫入失敗') } else {
            console.log('寫入成功')

        }
    })
})

請求一個包含圖片 css的html文件

var fs = require("fs");
var http = require("http");

 var server = http.createServer((req,res) => {
    if(req.url == "/1.html"){
        //當(dāng)有用戶發(fā)那個吻服務(wù)器的時候羊苟,我們讀取文件
        fs.readFile("./public/1.html",(err,data) => {
            //我們在res流里面輸出文件內(nèi)容
            res.end(data.toString());
        });
    }else if(req.url == "/mao.jpg"){
        fs.readFile("./public/mao.jpg",(err,data) => {
            //圖片是二進(jìn)制的残制,所以toString()反而錯誤泳猬!
            res.end(data);
        });
    }else if(req.url == "/css.css"){
        fs.readFile("./public/css.css",(err,data) => {
            res.end(data.toString());
        });
    }
    else{
        res.setHeader("content-type","text/html;charset=UTF-8");
        res.end("請檢查網(wǎng)址尤勋!");
    }
});

server.listen(3000,(err)=>{
    if(err){
        console.log("服務(wù)器開啟失敗");
        return;
    }
    console.log("服務(wù)器開啟成功扮碧,3000端口陶缺。");
}); 

05:45

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末跪但,一起剝皮案震驚了整個濱河市凉当,隨后出現(xiàn)的幾起案子夯到,更是在濱河造成了極大的恐慌倡鲸,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件黄娘,死亡現(xiàn)場離奇詭異峭状,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)逼争,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進(jìn)店門优床,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人誓焦,你說我怎么就攤上這事胆敞∽琶保” “怎么了?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵移层,是天一觀的道長仍翰。 經(jīng)常有香客問我,道長观话,這世上最難降的妖魔是什么予借? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮频蛔,結(jié)果婚禮上灵迫,老公的妹妹穿的比我還像新娘。我一直安慰自己晦溪,他們只是感情好瀑粥,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著三圆,像睡著了一般狞换。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上舟肉,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天哀澈,我揣著相機(jī)與錄音,去河邊找鬼度气。 笑死,一個胖子當(dāng)著我的面吹牛膨报,可吹牛的內(nèi)容都是我干的磷籍。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼现柠,長吁一口氣:“原來是場噩夢啊……” “哼院领!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起够吩,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤比然,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后周循,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體强法,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年湾笛,在試婚紗的時候發(fā)現(xiàn)自己被綠了饮怯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡嚎研,死狀恐怖蓖墅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤论矾,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布教翩,位于F島的核電站,受9級特大地震影響贪壳,放射性物質(zhì)發(fā)生泄漏饱亿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一寥袭、第九天 我趴在偏房一處隱蔽的房頂上張望路捧。 院中可真熱鬧,春花似錦传黄、人聲如沸杰扫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽章姓。三九已至,卻和暖如春识埋,著一層夾襖步出監(jiān)牢的瞬間凡伊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工窒舟, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留系忙,地道東北人。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓惠豺,卻偏偏與公主長得像银还,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子洁墙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評論 2 359

推薦閱讀更多精彩內(nèi)容