這有一篇Nodejs+Express的初級指南……

寫在前面:

這是小生跟著視頻學(xué)習(xí)的總結(jié)昭齐,文末貼的有地址轩触,很容易上手,自己都跟著敲了一遍肖粮,覺得不錯(cuò)潮太,
值得總結(jié)安利一下医增,歡迎糾錯(cuò)……

一、 Nodejs創(chuàng)建第一個(gè)應(yīng)用

  1. 引入 http 模塊

     var http = require("http");
    
  2. 創(chuàng)建服務(wù)器

    接下來我們使用 http.createServer() 方法創(chuàng)建服務(wù)器谅河,并使用 listen 方法綁定 8888 端口咱旱。 函數(shù)通過 request, response 參數(shù)來接收和響應(yīng)數(shù)據(jù)。

var http = require('http'); 
http.createServer(function (request, response) {
// 發(fā)送 HTTP 頭部
// HTTP 狀態(tài)值: 200 : OK
//設(shè)置 HTTP 頭部绷耍,狀態(tài)碼是 200吐限,文件類型是 html,字符集是 utf8 response.writeHead(200,{"Content-Type":"text/html;charset=UTF-8"});
// 發(fā)送響應(yīng)數(shù)據(jù) "Hello World"
res.end("哈哈哈哈褂始,我買了一個(gè) iPhone" + (1+2+3) + "s"); }).listen(8888 );
// 終端打印如下信息
console.log('Server running at http://127.0.0.1:8888/');
  1. 運(yùn)行程序

     node server.js
    

二诸典、HTTP模塊, URL模塊

2.1 HTTP 模塊的使用

//引用模塊
var http = require("http");
//創(chuàng)建一個(gè)服務(wù)器,回調(diào)函數(shù)表示接收到請求之后做的事情
var server = http.createServer(function(req,res){ //req 參數(shù)表示請求崎苗,res 表示響應(yīng)
// 設(shè)置一個(gè)響應(yīng)頭
res.writeHead(200,{"Content-Type":"text/htm l;c harset=UTF8"});

console.log("服務(wù)器接收到了請求" + req.url);

res.end(); // End 方法使 Web 服務(wù)器停止處理腳本并返回當(dāng)前結(jié)果
});
//監(jiān)聽端口
server.listen(3000,"127.0.0.1");

2.2狐粱、URL 模塊的使用

url.parse() 解析 URL
url.format(urlObject) //是上面 url.parse() 操作的逆向操作
url.resolve(from, to) 添加或者替換地址
  1. url.parse()
image
image
  1. url.format()
image
  1. url.resolve()
image

三、 Nodejs 自啟動(dòng)工具 supervisor

supervisor 會(huì)不停的 watch 你應(yīng)用下面的所有文件胆数,發(fā)現(xiàn)有文件被修改肌蜻,就重新載入程序文件這樣就實(shí)現(xiàn)了部署,修改了程序文件后馬上就能看到變更后的結(jié)果必尼。麻麻再也不用擔(dān)心我的重啟 nodejs 了!

  1. 首先安裝 supervisor

     npm install -g supervisor
    
  2. 使用 supervisor 代替 node 命令啟動(dòng)應(yīng)用

image

三蒋搜、 Nodejs中的 FS 模塊

  1. fs.stat 檢測是文件還是目錄
fs.stat('hello.js', (error, stats) =>{ 
    if (error){
        console .log(error) 
    } else {
        console .log(stats)
        console .log(`文件: ${stats.isFile()}` )
        console .log(`目錄: ${stats.isDirectory()}` ) 
    }
})
  1. fs.mkdir 創(chuàng)建目錄
const fs = require('fs')
fs.mkdir('logs', (error) => { 
    if (error){
        console .log(error)
    } else {
        console .log('成功創(chuàng) 建目錄:logs' )
    }
})
  1. fs.writeFile 創(chuàng)建寫入文件
fs.writeFile('logs/hello.log', '您好 ~ \n', (error) => {
    if(error) {
        console .log(error)
    } else {
        console .log('成功寫入文件' )
    }
})
  1. fs.appendFile 追加文件
 fs.appendFile('logs/hello.log', 'hello ~ \n', (error) => { 
     if(error) {
        console .log(error) } 
    else {
        console .log('成功寫入文件' ) 
    }
})
  1. fs.readFile 讀取文件
const fs = require('fs')
fs.readFile('logs/hello.log', 'utf8', (error, data) =>{ 
    if (error) {
        console .log(error) 
    } else {
        console .log(data) 
    }
})
  1. fs.readdir 讀取目錄
const fs = require('fs')
fs.readdir('logs', (error, files) => { 
    if (error) {
        console .log(error)
    } else {
        console .log(files)
    } 
})
  1. fs.rename 重命名
const fs = require('fs')
fs.rename('js/hello.log', 'js/greeting.log', (error) =>{
    if (error) {
        console .log(error)
    } else {
        console .log(' 重命名成功' )
    } 
})
  1. fs.rmdir 刪除目錄
fs.rmdir('logs', (error) =>{
    if (error) {
        console .log(error)
    } else { 
        console.log('成功的刪除了目錄:logs')
    } 
})
  1. fs.unlink 刪除文件
fs.unlink(`logs/${file}`, (error) => { 
   if (error) {
       console .log(error)
   } else {
       console.log(`成功的刪除了文件: ${file}`) 
   }
})
  1. fs.createReadStream 從文件流中讀取數(shù)據(jù)
const fs = require('fs')
var fileReadStream = fs.createReadStream('data.json')
let count=0; 
var str='';
fileReadStream.on('data', (chunk) => {
   console.log(`${ ++count } 接收到:${chunk.length}`);
   str += chunk; 
})
fileReadStream.on('end', () => { 
   console.log('--- 結(jié)束 ---'); 
   console.log(count );
   console.log(str ); 
})
fileReadStream.on('error', (error) => { 
   console .log(error)
})
  1. fs.createWriteStream 寫入文件
var fs = require("fs");
var data = '我是從數(shù)據(jù)庫獲取的數(shù)據(jù),我要保存起來';
// 創(chuàng)建一個(gè)可以寫入的流胰伍,寫入到文件 output.txt 中
var writerStream = fs.createWriteStream('output.txt'); 
// 使用 utf8 編碼寫入數(shù)據(jù)
writerStream .write(data ,'UTF8' ); // 標(biāo)記文件末尾
writerStream .end();
// 處理流事件 --> finish 事件
writerStream.on('finish', function() { 
/*finish - 所有數(shù)據(jù)已被寫入到底層系統(tǒng)時(shí)觸發(fā)。*/ 
   console .log("寫入完成酸休。" );
});
writerStream.on('error', function(err){
   console.log(err.stack); 
});
console .log("程序執(zhí)行完畢" );
  1. 管道流 管道提供了一個(gè)輸出流到輸入流的機(jī)制骂租。
    通常我們用于從一個(gè)流中獲取數(shù)據(jù)并將數(shù)據(jù)傳遞到另外一個(gè)流中。
image

如上面的圖片所示斑司,我們把文件比作裝水的桶渗饮,而水就是文件里的內(nèi)容,我們用一根管子(pipe )連接兩個(gè)桶使得水從一個(gè)桶流入另一個(gè)桶宿刮,這樣就慢慢的實(shí)現(xiàn)了大文件的復(fù)制過程互站。以下實(shí)例我們通過讀取一個(gè)文件內(nèi)容并將內(nèi)容寫入到另外一個(gè)文件中。

var fs = require("fs");
// 創(chuàng)建一個(gè)可讀流
var readerStream = fs.createReadStream('input.txt'); // 創(chuàng)建一個(gè)可寫流
var writerStream = fs.createWriteStream('output.txt');
// 管道讀寫操作
// 讀取 input.txt 文件內(nèi)容僵缺,并將內(nèi)容寫入到 output.txt 文件中 
readerStream.pipe(writerStream );
console.log("程 序執(zhí)行完畢" );

四胡桃、 Nodejs 創(chuàng)建一個(gè) WEB 服務(wù)器。

  1. server.js
// 引入http模塊
var http = require('http');
// 引入fs模塊
var fs = require('fs');
// 引入path模塊
var path = require('path');
// 引入url模塊
var url = require('url');
// 引入自定義的解析模塊;
var mime = require('./model/getMimeFile.js');
http.createServer(function (req,res) {
    <!-- 處理請求地址磕潮,獲取請求的pathname  -->
    var pathName = url.parse(req.url).pathname;
    <!-- 設(shè)置響應(yīng)頭 根據(jù)文件后綴設(shè)置不同的Content-Type,讓瀏覽器解析該文件 -->
    res.writeHead(200, {"Content-Type": " " + mime.getMime(fs, path.extname(pathName))+ "; charset=utf-8"});
    
    if(pathName == '/') pathName = '/index/html';
    if(pathName !== '/favicon.ico') {
        // 文件操作去讀取static下面的index.html
        fs.readFile('static/'+pathName,function (err,data) {
            if(err){
                fs.readFile('static/404.html',function (err,data404) {
                    res.write(data404);
                    res.end();
                })
            } else {
                // console.log(data);
                res.write(data);
                res.end();
            }
        })
    }
    
}).listen('8002');
  1. getMimeFile.js
exports.getMime = function (fs,extname) {
    var data = fs.readFileSync('./mime.json');
    var Mimes = JSON.parse(data.toString())
    return Mimes[extname] || 'text/html';
}

五翠胰、 Nodejs 的非阻塞 I/O容贝、異步、事件驅(qū)動(dòng)

  1. Nodejs的單線程 非阻塞I/O事件驅(qū)動(dòng)
在 Java之景、PHP 或者.net 等服務(wù)器端語言中斤富,會(huì)為每一個(gè)客戶端連接創(chuàng)建一個(gè)新的線程。
而每個(gè)線程需要耗費(fèi)大約 2MB 內(nèi)存锻狗。也就是說满力,理論上,一個(gè)8GB 內(nèi)存的服務(wù)器可以同時(shí) 連接的最大用戶數(shù)為 4000 個(gè)左右轻纪。
要讓 Web 應(yīng)用程序支持更多的用戶油额,就需要增加服務(wù)器 的數(shù)量,而 Web 應(yīng)用程序的硬件成本當(dāng)然就上升了桐磁。
Node.js 不為每個(gè)客戶連接創(chuàng)建一個(gè)新的線程悔耘,而僅僅使用一個(gè)線程。
當(dāng)有用戶連接了,就觸發(fā)一個(gè)內(nèi)部事件我擂,通過非阻塞 I/O衬以、事件驅(qū)動(dòng)機(jī)制,讓 Node.js 程序宏觀上也是并行的校摩。 
使用 Node.js看峻,一個(gè) 8GB 內(nèi)存的服務(wù)器,可以同時(shí)處理超過 4 萬用戶的連接衙吩。
  1. Nodejs 回調(diào)處理異步
//正確的處理異步:
function getData(callback){ //模擬請求數(shù)據(jù)
    var result=''; 
    setTimeout(function (){
        result='這是請求到的 數(shù)據(jù)'; 
        callback(result);
    },200); 
}
getData(function(data){
    console.log(data);
})
  1. Nodejs events 模塊處理異步
// 引入 events 模塊
var events = require('events');
var EventEmitter = new events.EventEmitter() ; /*實(shí)例化事件對象*/
EventEmitter.on('toparent',function(){ 
    console.log('接收到了廣播事件');
})
setTimeout(function (){
    console.log('廣播');
    EventEmitter.emit('toparent'); /*發(fā)送廣播*/ 
},1000)

六互妓、 Nodejs的 ejs 模板引擎

  1. 路由
    官方解釋:
    路由(Routing)是由一個(gè) URI(或者叫路徑)和一個(gè)特定的 HTTP 方法(GET、POST 等)組成 的坤塞,涉及到應(yīng)用如何響應(yīng)客戶端對某個(gè)網(wǎng)站節(jié)點(diǎn)的訪問冯勉。
image
  1. 初識 EJS 模塊引擎

文檔: https://www.npmjs.com/package/ejs
安裝 :

npm install ejs –save     /     cnpm install ejs --save

Nodejs中使用:

ejs.renderFile(filename, data, options, function(err, str){ 
    str => Rendered HTML string
});

EJS 常用標(biāo)簽

  • <%%>流程控制標(biāo)簽
  • <%=%>輸出標(biāo)簽(原文輸出HTML標(biāo)簽)
  • <%-%>輸出標(biāo)簽(HTML會(huì)被瀏覽器解析)
   <a href="<%= url %>"><img src="<%= imageURL %>" alt=""></a><ul>
   <ul>
       <% for(var i = 0 ; i < news.length ; i++){ %> 
           <li> <%= news[i] %> </li> 
       <% } %>
   </ul>
   
  1. Get、Post

超文本傳輸協(xié)議(HTTP)的設(shè)計(jì)目的是保證客戶端機(jī)器與服務(wù)器之間的通信摹芙。
在客戶端和服務(wù)器之間進(jìn)行請求-響應(yīng)時(shí)灼狰,兩種最常被用到的方法是:GET 和 POST。

GET - 從指定的資源請求數(shù)據(jù)浮禾。(一般用于獲取數(shù)據(jù))

POST - 向指定的資源提交要被處理的數(shù)據(jù)交胚。(一般用于提交數(shù)據(jù))

獲取 GET 傳值:

var urlinfo = url.parse(req.url,true); 
urlinfo.query();

獲取 POST 傳值:

var postData = ''; // 數(shù)據(jù)塊接收中
req.on('data', function (postDataChunk) { 
    postData += postDataChunk;
});
// 數(shù)據(jù)接收完畢,執(zhí)行回調(diào)函數(shù)
req.on('end', function () { 
    try {
        postData = JSON.parse(postData); 
    } 
    catch (e) { }
    req.query = postData;
    console.log(querystring .parse(postData));
});

七盈电、 MongoDb 數(shù)據(jù)庫介紹蝴簇、安裝、使用

  1. 數(shù)據(jù)庫和文件的主要區(qū)別
1匆帚、 數(shù)據(jù)庫有數(shù)據(jù)庫表熬词、行和列的概念,讓我們存儲操作數(shù)據(jù)更方便
2吸重、 數(shù)據(jù)庫提供了非常方便的接口荡澎,可以讓 nodejs均践、php java .net 很方便的實(shí)現(xiàn)增加修改刪除功能。
  1. NoSql 介紹
NoSQL(NoSQL = Not Only SQL )摩幔,意即“不僅僅是 SQL”彤委,
它指的是非關(guān)系型的數(shù)據(jù)庫,是以key-value形式存儲或衡,和傳統(tǒng)的關(guān)系型數(shù)據(jù)庫不一樣焦影,
不一定遵循傳統(tǒng)數(shù)據(jù)庫的一些基本要求.
  1. 什么時(shí)候建議使用 NoSql
1、對數(shù)據(jù)庫高并發(fā)讀寫的需求 
2封断、對海量數(shù)據(jù)的高效率存儲和訪問的需求
3斯辰、對數(shù)據(jù)庫的高可擴(kuò)展性和高可用性的需求
  1. NoSql 和傳統(tǒng)數(shù)據(jù)庫簡單對比
非結(jié)構(gòu)型數(shù)據(jù)庫。沒有行坡疼、列的概念彬呻。用 JSON 來存儲數(shù)據(jù)。
集合就相當(dāng)于“表 ”柄瑰,文檔就相當(dāng)于“行”闸氮。
image
  1. mongodb的使用方法
    i. mongodb的安裝方法
    ii. 開啟 mongodb服務(wù):要管理數(shù)據(jù)庫教沾,必須先開啟服務(wù),然后進(jìn)行數(shù)據(jù)庫的相關(guān)操作
    iii. mongodb的常用指令

    查詢 (find)
    增加 (insert)
    修改 (update)
    刪除(remove)

```
查看所有數(shù)據(jù)庫列表    show dbs
使用數(shù)據(jù)庫蒲跨、創(chuàng)建 數(shù)據(jù)庫    use student  (student代表 data_base_name);

插入(增加)一條數(shù)據(jù)    db.student.insert({“name”:”xiaoming”});
db.表名.insert({"name":"zhangsan"}); student 集合名稱(表)

顯示當(dāng)前的數(shù)據(jù)集合(mysql 中叫表)    show collections
刪除數(shù)據(jù)庫,刪除當(dāng)前所在的數(shù)據(jù)庫    db.dropDatabase();
刪除集合授翻,刪除指定的集合 刪除表     db.user.drop()或悲;

1、查詢所有記 錄
db.userInfo.find();
相當(dāng)于:select* from userInfo;

2堪唐、查詢 age > 22 的記錄 db.userInfo.find({age: {$gt: 22}});
相當(dāng)于:select * from userInfo where age >22;

3巡语、查詢 age < 22 的記錄
db.userInfo.find({age: {$lt: 22}}); 
相當(dāng)于:select * from userInfo where age <22; 

4、查詢 age >= 25 的記錄
db.userInfo.find({age: {$gte: 25}}); 
相當(dāng)于:select * from userInfo where age >= 25;

5淮菠、查詢 age <= 25 的記錄 
db.userInfo.find({age: {$lte: 25}});

6. 按照年齡排序 1 升序 -1 降序 
升序: db.userInfo.find().sort({age: 1}); 
降序: db.userInfo.find().sort({age: -1});

7. 查詢前 5 條數(shù)據(jù) db.userInfo.find().limit(5 ); 
   相當(dāng)于:selecttop 5 * from userInfo;

修改數(shù)據(jù)  
查找名字叫做小明的男公,把年齡更改為 16 歲:
db.student.update({"name":"小明"},{$set:{"ag e":16}});

刪除數(shù)據(jù)
db.collectionsNames.remove( { "borough": "Manhattan" } )
db.users.remove({age: 132});

```

八、 express的介紹

1. express的安裝使用

npm install express –save 
demo:
    var express=require('express');  /*引入 express*/
    var app=newexpress(); /*實(shí)例化express 賦值給app*/
    //配置路由 匹配 URl 地址實(shí)現(xiàn)不同的功能
    app.get('/',function(req,res){ 
        res.send('首頁');
    }) 
    app.get('/search',function(req,res){
        res.send('搜索'); //?keyword=華為手機(jī)&enc=utf-8&suggest=1.his.0.0&wq
    })
    app.get('/login',function(req,res){ 
        res.send('登錄');
    }) 
    app.get('/register',function(req,res){
        res.send('注冊');
    }) 
    app.listen(3000,"127.0.0.1");

2. Express 框架中的路由


當(dāng)用 get 請求訪問一個(gè)網(wǎng)址的時(shí)候兜材,做什么事情:
app.get("網(wǎng)址",function(req,res){

});

當(dāng)用 post 訪問一個(gè)網(wǎng)址的時(shí)候理澎,做什么事情:
app.post("網(wǎng)址",function(req,res){

});
// user 節(jié)點(diǎn)接受 PUT 請求
app.put('/user', function (req, res) {
    res.send('Got a PUT request at /user'); 
});

// user 節(jié)點(diǎn)接受 DELETE 請求 
app.delete('/user', function (req, res) {
   res.send('Got a DELETE request at /user'); 
});

動(dòng)態(tài)路由配置:
"/user/:id "
app.get( ,function(req,res){ 
    var id = req.params["id"];
    res.send(id); 
});
路由的正則匹配:(了解)
 app.get('/ab*cd', function(req, res) { 
    res.send('ab*cd');
});

路由里面獲取 Get 傳值
/news?id=2&sex=nan

app.get('/news, function(req, res) { 
    console.log(req.query);
});

3逞力、Express 框架中 ejs 的安裝使用:

i. npm install ejs --save-dev   // 安裝

ii. Express 中 ejs 的使用:

var express = require("express");
var app = express();
app.set("view engine","ejs");
app.get("/",function(req,res){ });
res.render("news",{
    "news" : ["我是小新聞啊","我也是啊","哈哈哈哈"]
}); app.listen(3000);

iii. 指定模板位置 曙寡,默認(rèn)模板位置在 views
 
 app.set('views', __dirname + '/views');
 
iv. Ejs 后綴修改為 Html
這是一個(gè)小技巧,看著.ejs 的后綴總覺得不爽寇荧,使用如下方法举庶,可以將模板文件的后綴換成我們習(xí)慣的.html。

1.在 app.js 的頭上定義 ejs:,代碼如下:
var ejs = require('ejs');
2.注冊 html 模板引擎代碼如下: 
app.engine('html',ejs.__express);
3.將模板引擎換成 html代碼如下:
app.set('view engine', 'html');
4.修改模 板文件的后綴為 .html揩抡。

4. 利用 Express.static 托管靜態(tài)文件

1户侥、如果你的靜態(tài)資源存放在多個(gè)目錄下面镀琉,你可以多次調(diào)用 express.static 中間件:

app.use(express.static('public'));

現(xiàn)在,public目錄下面的文件就可以訪問了

image

2蕊唐、如果你希望所有通過 express.static 訪問的文件都存放在一個(gè)“虛擬(virtual)”目 錄(即目錄根本不存在)下面屋摔,可以通過為靜態(tài)資源目錄指定一個(gè)掛載路徑的方式來實(shí)現(xiàn)

app.use('/static', express.static('public'));

現(xiàn)在,你就可以通過帶有 “/static” 前綴的地址來訪問 public 目錄下 面的文件了替梨。

image

5钓试、 Express 中間件 (powerful function)

  1. 應(yīng)用級中間件
image
  1. 路由中間件
image
  1. 錯(cuò)誤處理中間件
image
  1. 內(nèi)置中間件
image
  1. 第三方中間件
body-parser    獲取post提交的數(shù)據(jù)  

6、 獲取 Get Post 請求的參數(shù)

● GET 請求的參數(shù)在 URL 中副瀑,在原生 Node 中弓熏,需要使用 url 模塊來識別參數(shù)字符串。在Express 中糠睡,不需要使用 url 模塊了挽鞠。可以直接使用 req.query 對象狈孔。

● POST 請求在 express 中不能直接獲得信认,可以使用 body-parser模塊。使用后除抛,將可以用req.body得到參數(shù)狮杨。但是如果表單中含有文件上傳,那么還是需要使用 formidable 模塊到忽。

var express = require('express')
var bodyParser = require('body-parser')
var app = express()
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())
app.use(function (req, res) { 
    res.setHeader('Content-Type', 'text/plain') 
    res.write('you posted:\n')
    res.end(JSON.stringify(req.body, null, 2))
})

知識點(diǎn)大概總結(jié)這么多橄教,也算是給前段時(shí)間的學(xué)習(xí)做了一個(gè)總結(jié),省得學(xué)點(diǎn)喘漏,忘點(diǎn)[捂臉???♀?]

GitHub地址: node+express;
歡迎交流學(xué)習(xí)……

聲明:知識點(diǎn)總結(jié)是跟著 大地老師的node視頻

一點(diǎn)點(diǎn)學(xué)習(xí)的护蝶,整個(gè)課程還是很詳細(xì)的,有興趣的可以下載下來自學(xué)……

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末翩迈,一起剝皮案震驚了整個(gè)濱河市持灰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌负饲,老刑警劉巖堤魁,帶你破解...
    沈念sama閱讀 212,294評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異返十,居然都是意外死亡妥泉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,493評論 3 385
  • 文/潘曉璐 我一進(jìn)店門洞坑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盲链,“玉大人,你說我怎么就攤上這事」粽矗” “怎么了本慕?”我有些...
    開封第一講書人閱讀 157,790評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長侧漓。 經(jīng)常有香客問我锅尘,道長,這世上最難降的妖魔是什么布蔗? 我笑而不...
    開封第一講書人閱讀 56,595評論 1 284
  • 正文 為了忘掉前任鉴象,我火速辦了婚禮,結(jié)果婚禮上何鸡,老公的妹妹穿的比我還像新娘纺弊。我一直安慰自己,他們只是感情好骡男,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,718評論 6 386
  • 文/花漫 我一把揭開白布淆游。 她就那樣靜靜地躺著,像睡著了一般隔盛。 火紅的嫁衣襯著肌膚如雪犹菱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,906評論 1 290
  • 那天吮炕,我揣著相機(jī)與錄音腊脱,去河邊找鬼。 笑死龙亲,一個(gè)胖子當(dāng)著我的面吹牛陕凹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鳄炉,決...
    沈念sama閱讀 39,053評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼杜耙,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了拂盯?” 一聲冷哼從身側(cè)響起佑女,我...
    開封第一講書人閱讀 37,797評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谈竿,沒想到半個(gè)月后团驱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,250評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡空凸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,570評論 2 327
  • 正文 我和宋清朗相戀三年嚎花,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片劫恒。...
    茶點(diǎn)故事閱讀 38,711評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡贩幻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出两嘴,到底是詐尸還是另有隱情丛楚,我是刑警寧澤,帶...
    沈念sama閱讀 34,388評論 4 332
  • 正文 年R本政府宣布憔辫,位于F島的核電站趣些,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏贰您。R本人自食惡果不足惜坏平,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,018評論 3 316
  • 文/蒙蒙 一撩匕、第九天 我趴在偏房一處隱蔽的房頂上張望雨女。 院中可真熱鬧,春花似錦播揪、人聲如沸杠园。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,796評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抛蚁。三九已至陈醒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瞧甩,已是汗流浹背钉跷。 一陣腳步聲響...
    開封第一講書人閱讀 32,023評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肚逸,地道東北人爷辙。 一個(gè)月前我還...
    沈念sama閱讀 46,461評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像朦促,于是被迫代替她去往敵國和親犬钢。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,595評論 2 350

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

  • 概要 64學(xué)時(shí) 3.5學(xué)分 章節(jié)安排 電子商務(wù)網(wǎng)站概況 HTML5+CSS3 JavaScript Node 電子...
    阿啊阿吖丁閱讀 9,142評論 0 3
  • 1.運(yùn)行一個(gè)nodejs文件思灰, 如一個(gè)js文件中只含有console.log("hello world");的文件...
    不忘初心_9a16閱讀 5,782評論 0 8
  • 個(gè)人入門學(xué)習(xí)用筆記玷犹、不過多作為參考依據(jù)。如有錯(cuò)誤歡迎斧正 目錄 簡書好像不支持錨點(diǎn)洒疚、復(fù)制搜索(反正也是寫給我自己看...
    kirito_song閱讀 2,458評論 1 37
  • 搭建開發(fā)環(huán)境并模擬交互數(shù)據(jù) 一歹颓、實(shí)驗(yàn)說明 下述介紹為實(shí)驗(yàn)樓默認(rèn)環(huán)境,如果您使用的是定制環(huán)境油湖,請修改成您自己的環(huán)境介...
    玄月府的小妖在debug閱讀 2,116評論 0 15
  • Node.js第一天 1. 初識Node.js 1.1 Node.js是什么 Node.js? is a Java...
    再見天才閱讀 4,724評論 1 24