nodejs學(xué)習(xí)資料 - 第六節(jié):全局對(duì)象與全局變量&常用工具

手冊(cè)

https://nodejs.org/api/globals.html
https://nodejs.org/api/console.html
https://nodejs.org/api/process.html
https://nodejs.org/api/util.html

全局對(duì)象與全局變量

__filename 當(dāng)前正在執(zhí)行的腳本的文件名

執(zhí)行

console.log( __filename );

輸出

$ node main.js
/code/nodejs/main.js

__dirname 當(dāng)前執(zhí)行腳本所在的目錄

執(zhí)行

console.log( __dirname );

輸出

$ node main.js
/code/nodejs

setTimeout(cb, ms) 只執(zhí)行一次指定函數(shù)

執(zhí)行

function printHello(){
   console.log( "Hello, World!");
}
// 兩秒后執(zhí)行以上函數(shù)
setTimeout(printHello, 2000);

輸出

$ node main.js
Hello, World!

clearTimeout(t) 清除定時(shí)器

執(zhí)行

function printHello(){
   console.log( "Hello, World!");
}
// 兩秒后執(zhí)行以上函數(shù)
var t = setTimeout(printHello, 2000);

// 清除定時(shí)器
clearTimeout(t);

輸出

$ node main.js

setInterval(cb, ms) 會(huì)不停地調(diào)用函數(shù)

執(zhí)行

function printHello(){
   console.log( "Hello, World!");
}
// 兩秒后執(zhí)行以上函數(shù)
setInterval(printHello, 2000);

輸出

$ node main.js
Hello, World!
Hello, World!
Hello, World!
Hello, World!
Hello, World!

clearInterval(t) 函數(shù)來清除定時(shí)器

執(zhí)行

...
var t = setInterval(printHello, 2000);
clearInterval(t);

輸出

$ node main.js

console 控制臺(tái)標(biāo)準(zhǔn)輸出

方法 描述
console.log([data][, ...]) 向標(biāo)準(zhǔn)輸出流打印字符并以換行符結(jié)束求厕。該方法接收若干 個(gè)參數(shù)垛耳,如果只有一個(gè)參數(shù)冰垄,則輸出這個(gè)參數(shù)的字符串形式移国。如果有多個(gè)參數(shù)召庞,則 以類似于C 語言 printf() 命令的格式輸出钥顽。
console.info([data][, ...]) P該命令的作用是返回信息性消息忙迁,這個(gè)命令與console.log差別并不大构蹬,除了在chrome中只會(huì)輸出文字外,其余的會(huì)顯示一個(gè)藍(lán)色的驚嘆號(hào)则酝。
console.error([data][, ...]) 輸出錯(cuò)誤消息的殉簸。控制臺(tái)在出現(xiàn)錯(cuò)誤時(shí)會(huì)顯示是紅色的叉子沽讹。
console.warn([data][, ...]) 輸出警告消息般卑。控制臺(tái)出現(xiàn)有黃色的驚嘆號(hào)爽雄。
console.dir(obj[, options]) 用來對(duì)一個(gè)對(duì)象進(jìn)行檢查(inspect)蝠检,并以易于閱讀和打印的格式顯示。
console.time(label) 輸出時(shí)間挚瘟,表示計(jì)時(shí)開始叹谁。
console.timeEnd(label) 結(jié)束時(shí)間,表示計(jì)時(shí)結(jié)束乘盖。
console.trace(message[, ...]) 當(dāng)前執(zhí)行的代碼在堆棧中的調(diào)用路徑焰檩,這個(gè)測(cè)試函數(shù)運(yùn)行很有幫助,只要給想測(cè)試的函數(shù)里面加入 console.trace 就行了订框。
console.assert(value[, message][, ...]) 用于判斷某個(gè)表達(dá)式或變量是否為真析苫,接手兩個(gè)參數(shù),第一個(gè)參數(shù)是表達(dá)式,第二個(gè)參數(shù)是字符串衩侥。只有當(dāng)?shù)谝粋€(gè)參數(shù)為false浪腐,才會(huì)輸出第二個(gè)參數(shù),否則不會(huì)有任何結(jié)果顿乒。

執(zhí)行

// 程序運(yùn)行耗時(shí)
console.time("程序運(yùn)行耗時(shí)");
console.log('Hello world'); 
console.log('byvoid%diovyb'); 
console.log('byvoid%diovyb', 1991);
console.trace()
console.timeEnd('程序運(yùn)行耗時(shí)');
console.info("程序執(zhí)行完畢议街。")

輸出

Hello world 
byvoid%diovyb 
byvoid1991iovyb
Trace
    at Object.<anonymous> (/Users/nodejs-do/09-全局對(duì)象與變量/main.js:30:9)
    at Module._compile (module.js:409:26)
    at Object.Module._extensions..js (module.js:416:10)
    at Module.load (module.js:343:32)
    at Function.Module._load (module.js:300:12)
    at Function.Module.runMain (module.js:441:10)
    at startup (node.js:134:18)
    at node.js:962:3
程序運(yùn)行耗時(shí): 22ms
程序執(zhí)行完畢。

process 是一個(gè)全局變量璧榄,即 global 對(duì)象的屬性特漩。

事件 描述
exit 當(dāng)進(jìn)程準(zhǔn)備退出時(shí)觸發(fā)
beforeExit 當(dāng) node 清空事件循環(huán),并且沒有其他安排時(shí)觸發(fā)這個(gè)事件骨杂。通常來說涂身,當(dāng)沒有進(jìn)程安排時(shí) node 退出,但是 'beforeExit' 的監(jiān)聽器可以異步調(diào)用搓蚪,這樣 node 就會(huì)繼續(xù)執(zhí)行蛤售。
uncaughtException 當(dāng)一個(gè)異常冒泡回到事件循環(huán),觸發(fā)這個(gè)事件妒潭。如果給異常添加了監(jiān)視器悴能,默認(rèn)的操作(打印堆棧跟蹤信息并退出)就不會(huì)發(fā)生。
Signal 事件 當(dāng)進(jìn)程接收到信號(hào)時(shí)就觸發(fā)雳灾。信號(hào)列表詳見標(biāo)準(zhǔn)的 POSIX 信號(hào)名漠酿,如 SIGINT、SIGUSR1 等谎亩。

執(zhí)行

process.on('exit', function(code) {

  // 以下代碼永遠(yuǎn)不會(huì)執(zhí)行
  setTimeout(function() {
    console.log("該代碼不會(huì)執(zhí)行");
  }, 0);

  console.log('退出碼為:', code);
});
console.log("程序執(zhí)行結(jié)束");

輸出

$ node main.js
程序執(zhí)行結(jié)束
退出碼為: 0

退出狀態(tài)碼

名稱 描述
Uncaught Fatal Exception 有未捕獲異常炒嘲,并且沒有被域或 uncaughtException 處理函數(shù)處理。
Unused 保留
Internal JavaScript Parse Error JavaScript的源碼啟動(dòng) Node 進(jìn)程時(shí)引起解析錯(cuò)誤匈庭。非常罕見夫凸,僅會(huì)在開發(fā) Node 時(shí)才會(huì)有。
nternal JavaScript Evaluation Failure JavaScript 的源碼啟動(dòng) Node 進(jìn)程阱持,評(píng)估時(shí)返回函數(shù)失敗夭拌。非常罕見,僅會(huì)在開發(fā) Node 時(shí)才會(huì)有紊选。
Fatal Error V8 里致命的不可恢復(fù)的錯(cuò)誤啼止。通常會(huì)打印到 stderr 道逗,內(nèi)容為: FATAL ERROR
Non-function Internal Exception Handler 未捕獲異常,內(nèi)部異常處理函數(shù)不知為何設(shè)置為on-function,并且不能被調(diào)用牌借。
Internal Exception Handler Run-Time Failure 未捕獲的異常了赌, 并且異常處理函數(shù)處理時(shí)自己拋出了異常。例如,如果 process.on('uncaughtException') 或 domain.on('error') 拋出了異常此蜈。
Invalid Argument 可能是給了未知的參數(shù)即横,或者給的參數(shù)沒有值。
Internal JavaScript Run-Time Failure JavaScript的源碼啟動(dòng) Node 進(jìn)程時(shí)拋出錯(cuò)誤裆赵,非常罕見东囚,僅會(huì)在開發(fā) Node 時(shí)才會(huì)有。
Invalid Debug Argument 設(shè)置了參數(shù)--debug 和/或 --debug-brk战授,但是選擇了錯(cuò)誤端口页藻。
Signal Exits 如果 Node 接收到致命信號(hào),比如SIGKILL 或 SIGHUP植兰,那么退出代碼就是128 加信號(hào)代碼份帐。這是標(biāo)準(zhǔn)的 Unix 做法,退出信號(hào)代碼放在高位楣导。

Process 屬性

屬性 描述
stdout 標(biāo)準(zhǔn)輸出流废境。
stderr 標(biāo)準(zhǔn)錯(cuò)誤流。
stdin 標(biāo)準(zhǔn)輸入流筒繁。
argv argv 屬性返回一個(gè)數(shù)組噩凹,由命令行執(zhí)行腳本時(shí)的各個(gè)參數(shù)組成。它的第一個(gè)成員總是node毡咏,第二個(gè)成員是腳本文件名栓始,其余成員是腳本文件的參數(shù)。
execPath 返回執(zhí)行當(dāng)前腳本的 Node 二進(jìn)制文件的絕對(duì)路徑血当。
execArgv 返回一個(gè)數(shù)組幻赚,成員是命令行下執(zhí)行腳本時(shí),在Node可執(zhí)行文件與腳本文件之間的命令行參數(shù)臊旭。
env 返回一個(gè)對(duì)象落恼,成員為當(dāng)前 shell 的環(huán)境變量
exitCode 進(jìn)程退出時(shí)的代碼,如果進(jìn)程優(yōu)通過 process.exit() 退出离熏,不需要指定退出碼佳谦。
version Node 的版本,比如v0.10.18滋戳。
versions 一個(gè)屬性钻蔑,包含了 node 的版本和依賴.
config 一個(gè)包含用來編譯當(dāng)前 node 執(zhí)行文件的 javascript 配置選項(xiàng)的對(duì)象。它與運(yùn)行 ./configure 腳本生成的 "config.gypi" 文件相同奸鸯。
pid 當(dāng)前進(jìn)程的進(jìn)程號(hào)咪笑。
title 進(jìn)程名,默認(rèn)值為"node"娄涩,可以自定義該值窗怒。
arch 當(dāng)前 CPU 的架構(gòu):'arm'、'ia32' 或者 'x64'。
platform 運(yùn)行程序所在的平臺(tái)系統(tǒng) 'darwin', 'freebsd', 'linux', 'sunos' 或 'win32'
mainModule require.main 的備選方法扬虚。不同點(diǎn)努隙,如果主模塊在運(yùn)行時(shí)改變,require.main可能會(huì)繼續(xù)返回老的模塊辜昵≥┠鳎可以認(rèn)為,這兩者引用了同一個(gè)模塊堪置。

執(zhí)行

// 輸出到終端
process.stdout.write("Hello World!" + "\n");

// 通過參數(shù)讀取
process.argv.forEach(function(val, index, array) {
   console.log(index + ': ' + val);
});

// 獲取執(zhí)行路局
console.log(process.execPath);

// 平臺(tái)信息
console.log(process.platform);

輸出

$ node main.js
Hello World!
0: node
1: /cpde/nodejs/main.js
/usr/local/node/0.10.36/bin/node
darwin

Process 提供了很多有用的方法

方法 描述
abort() 這將導(dǎo)致 node 觸發(fā) abort 事件贷洲。會(huì)讓 node 退出并生成一個(gè)核心文件。
chdir(directory) 改變當(dāng)前工作進(jìn)程的目錄晋柱,如果操作失敗拋出異常优构。
cwd() 返回當(dāng)前進(jìn)程的工作目錄
exit([code]) 使用指定的 code 結(jié)束進(jìn)程。如果忽略雁竞,將會(huì)使用 code 0钦椭。
getgid() 獲取進(jìn)程的群組標(biāo)識(shí)(參見 getgid(2))。獲取到得時(shí)群組的數(shù)字 id碑诉,而不是名字彪腔。注意:這個(gè)函數(shù)僅在 POSIX 平臺(tái)上可用(例如,非Windows 和 Android)进栽。
setgid(id) 設(shè)置進(jìn)程的群組標(biāo)識(shí)(參見 setgid(2))德挣。可以接收數(shù)字 ID 或者群組名快毛。如果指定了群組名格嗅,會(huì)阻塞等待解析為數(shù)字 ID 。注意:這個(gè)函數(shù)僅在 POSIX 平臺(tái)上可用(例如唠帝,非Windows 和 Android)屯掖。
getuid() 獲取進(jìn)程的用戶標(biāo)識(shí)(參見 getuid(2))。這是數(shù)字的用戶 id襟衰,不是用戶名贴铜。注意:這個(gè)函數(shù)僅在 POSIX 平臺(tái)上可用(例如,非Windows 和 Android)瀑晒。
setuid(id) 設(shè)置進(jìn)程的用戶標(biāo)識(shí)(參見setuid(2))绍坝。接收數(shù)字 ID或字符串名字。果指定了群組名苔悦,會(huì)阻塞等待解析為數(shù)字 ID 轩褐。注意:這個(gè)函數(shù)僅在 POSIX 平臺(tái)上可用(例如,非Windows 和 Android)间坐。
getgroups() 返回進(jìn)程的群組 iD 數(shù)組灾挨。POSIX 系統(tǒng)沒有保證一定有邑退,但是 node.js 保證有竹宋。注意:這個(gè)函數(shù)僅在 POSIX 平臺(tái)上可用(例如劳澄,非Windows 和 Android)。
setgroups(groups) 設(shè)置進(jìn)程的群組 ID蜈七。這是授權(quán)操作秒拔,所有你需要有 root 權(quán)限,或者有 CAP_SETGID 能力飒硅。注意:這個(gè)函數(shù)僅在 POSIX 平臺(tái)上可用(例如砂缩,非Windows 和 Android)。
initgroups(user, extra_group) 讀取 /etc/group 三娩,并初始化群組訪問列表庵芭,使用成員所在的所有群組。這是授權(quán)操作雀监,所有你需要有 root 權(quán)限双吆,或者有 CAP_SETGID 能力。注意:這個(gè)函數(shù)僅在 POSIX 平臺(tái)上可用(例如会前,非Windows 和 Android)好乐。
kill(pid[, signal]) 發(fā)送信號(hào)給進(jìn)程. pid 是進(jìn)程id,并且 signal 是發(fā)送的信號(hào)的字符串描述瓦宜。信號(hào)名是字符串蔚万,比如 'SIGINT' 或 'SIGHUP'。如果忽略临庇,信號(hào)會(huì)是 'SIGTERM'反璃。
memoryUsage() 返回一個(gè)對(duì)象,描述了 Node 進(jìn)程所用的內(nèi)存狀況假夺,單位為字節(jié)版扩。
nextTick(callback) 一旦當(dāng)前事件循環(huán)結(jié)束,調(diào)用回到函數(shù)侄泽。
umask([mask]) 設(shè)置或讀取進(jìn)程文件的掩碼礁芦。子進(jìn)程從父進(jìn)程繼承掩碼。如果mask 參數(shù)有效悼尾,返回舊的掩碼柿扣。否則,返回當(dāng)前掩碼闺魏。
uptime() 返回 Node 已經(jīng)運(yùn)行的秒數(shù)未状。
hrtime() 返回當(dāng)前進(jìn)程的高分辨時(shí)間,形式為 [seconds, nanoseconds]數(shù)組析桥。它是相對(duì)于過去的任意事件司草。該值與日期無關(guān)艰垂,因此不受時(shí)鐘漂移的影響。主要用途是可以通過精確的時(shí)間間隔埋虹,來衡量程序的性能猜憎。你可以將之前的結(jié)果傳遞給當(dāng)前的 process.hrtime() ,會(huì)返回兩者間的時(shí)間差搔课,用來基準(zhǔn)和測(cè)量時(shí)間間隔胰柑。

執(zhí)行

// 輸出當(dāng)前目錄
console.log('當(dāng)前目錄: ' + process.cwd());

// 輸出當(dāng)前版本
console.log('當(dāng)前版本: ' + process.version);

// 輸出內(nèi)存使用情況
console.log(process.memoryUsage());

輸出

$ node main.js
當(dāng)前目錄: /code/nodejs
當(dāng)前版本: v4.3.2
{ rss: 12541952, heapTotal: 4083456, heapUsed: 2157056 }

util 常用工具

提供常用函數(shù)的集合,用于彌補(bǔ)核心JavaScript 的功能 過于精簡(jiǎn)的不足爬泥。

很多方法已經(jīng)不推薦使用柬讨,詳見官方手冊(cè)。

util.inherits

通過原型復(fù)制來實(shí)現(xiàn)的袍啡。

執(zhí)行

var util = require('util');

// 基類
function Base(){
    this.name = 'base';
    this.say = function(){
        console.log('say:'+this.name);
    };
}
Base.prototype.show = function(){
    console.log('show:'+this.name);
};

// 繼承類
function Sub(){
    this.name = 'sub';
}

util.inherits(Sub,Base);

var objSub = new Sub();
//objSub.say();
objSub.show();

輸出

$ node inherits.js
show:sub

只是復(fù)制方法函數(shù)踩官,但是構(gòu)造函數(shù)內(nèi)部不復(fù)制。
所有如果去掉say() 境输,報(bào)錯(cuò)蔗牡。

util.inspect

將任意對(duì)象轉(zhuǎn)換 為字符串的方法
util.inspect(object,[showHidden],[depth],[colors])
showHidden 是一個(gè)可選參數(shù),如果值為 true畴嘶,將會(huì)輸出更多隱藏信息蛋逾。
depth 表示最大遞歸的層數(shù),如果對(duì)象很復(fù)雜窗悯,你可以指定層數(shù)以控制輸出信息的多 少区匣。如果不指定depth,默認(rèn)會(huì)遞歸2層蒋院,指定為 null 表示將不限遞歸層數(shù)完整遍歷對(duì)象亏钩。
如果color 值為 true,輸出格式將會(huì)以ANSI 顏色編碼欺旧,通常用于在終端顯示更漂亮 的效果姑丑。
特別要指出的是,util.inspect 并不會(huì)簡(jiǎn)單地直接把對(duì)象轉(zhuǎn)換為字符串辞友,即使該對(duì) 象定義了toString 方法也不會(huì)調(diào)用栅哀。

執(zhí)行

var util = require('util'); 
function Person() { 
    this.name = 'byvoid'; 
    this.toString = function() { 
    return this.name; 
    }; 
} 
var obj = new Person(); 
console.log(util.inspect(obj)); 
console.log(util.inspect(obj, true, 2, true));

輸出

$ node inspect.js
Person { name: 'byvoid', toString: [Function] }
Person {
  name: 'byvoid',
  toString:
   { [Function]
     [length]: 0,
     [name]: '',
     [arguments]: null,
     [caller]: null,
     [prototype]: { [constructor]: [Circular] } } }

util.format(format[, ...args])

格式化輸出
%s - 字符串
%d - 數(shù)字
%j - 輸出 json
%% - 輸出自定義字符 這里是 '%'

執(zhí)行&輸出


util.format('%s:%s', 'foo');
// Returns: 'foo:%s'

util.format('%s:%s', 'foo', 'bar', 'baz');
// Returns: 'foo:bar baz'

util.format(1, 2, 3);
// Returns: '1 2 3'

util.deprecate(function, string)

標(biāo)記函數(shù)被棄用

執(zhí)行

  • deprecate.js
const util = require('util');

exports.puts = util.deprecate(function() {
  for (var i = 0, len = arguments.length; i < len; ++i) {
    process.stdout.write(arguments[i] + '\n');
  }
}, 'util.puts: Use console.log instead');
  • main.js
var obj = require('./deprecate');
obj.puts();

輸出

$ node main.js
util.puts: Use console.log instead

代碼

https://github.com/hans007/JavaScriptCodes/tree/master/nodejs-do

我的博客

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市称龙,隨后出現(xiàn)的幾起案子留拾,更是在濱河造成了極大的恐慌,老刑警劉巖鲫尊,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件痴柔,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡疫向,警方通過查閱死者的電腦和手機(jī)咳蔚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門豪嚎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谈火,你說我怎么就攤上這事侈询。” “怎么了堆巧?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵妄荔,是天一觀的道長(zhǎng)泼菌。 經(jīng)常有香客問我谍肤,道長(zhǎng),這世上最難降的妖魔是什么哗伯? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任荒揣,我火速辦了婚禮,結(jié)果婚禮上焊刹,老公的妹妹穿的比我還像新娘系任。我一直安慰自己,他們只是感情好虐块,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布俩滥。 她就那樣靜靜地躺著,像睡著了一般贺奠。 火紅的嫁衣襯著肌膚如雪霜旧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天儡率,我揣著相機(jī)與錄音挂据,去河邊找鬼。 笑死儿普,一個(gè)胖子當(dāng)著我的面吹牛崎逃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播眉孩,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼个绍,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了浪汪?” 一聲冷哼從身側(cè)響起巴柿,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吟宦,沒想到半個(gè)月后篮洁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡殃姓,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年袁波,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瓦阐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡篷牌,死狀恐怖睡蟋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情枷颊,我是刑警寧澤戳杀,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站夭苗,受9級(jí)特大地震影響信卡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜题造,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一傍菇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧界赔,春花似錦丢习、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至袜腥,卻和暖如春见擦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瞧挤。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工锡宋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人特恬。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓执俩,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親癌刽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子役首,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

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