官網地址javascript
中文網地址html
#node最簡單的web服務java
建立 server.jsnode
引入 原生 apilinux
var http = require('htttp');
複製代碼
http.createServer(function (request,response) {
//定義HTTP頭
response.writeHead(200, {'Content-Type':'text/plan'});
//發送相應的數據
response.end('Hello world!\n');
}).listen(8000);
//服務運行以後輸出一行信息
console.log('server is running...');
複製代碼
node server.js
複製代碼
全稱交互式解釋器 敲 node 命令進入 能夠在環境以後 直接進行代碼 的編寫 運算 優勢相似 瀏覽器的 console控制檯 通常來講咱們能夠在此環境下 進行一些 簡單的 代碼運算 驗證web
//阻塞時代碼
var fs = require('fs');
var data = fs.readFileSync('data.txt'); // 阻塞時用 同步讀取 readFileSync 非阻塞時用 readFile
console,log(data.toString());
複製代碼
//非阻塞代碼
var fs = require('fs');
fs.readFile('filename.txt',function(err,data){
// todo something
if(err){
return console.error(err)
}
console.log(data.toString());
})
cosnole.log("程序執行完畢")
複製代碼
事件處理代碼數據庫
//1. 引入 events對象,建立 eventEmitter對象
var events = require('events');
var eventEmitter = new events.EventEmmitter();
//2. 綁定事件處理程序
var connctHandler = function connected(){
console.log('connected被調用了');
};
eventEmitter.on('connection', connctHandler()); //完成事件綁定
//3.觸發事件
eventEmitter.emit('connection');
console.log("程序執行完畢");
複製代碼
文件的緩存區 有文件模塊緩存區 和 原生模塊緩存區express
//main.js 主要調用模塊的文件
var Hello = require('./hello');
hello = new Hello();
hello.setName('Richard');
hello.sayHello();
//hello.js 模塊文件
function Hello(){
var name ;
this.setName = function(argName){
name = argName
}
this.sayHello = function(){
console.log('hellko' + name);
}
}
module.exports = Hello;
複製代碼
代碼示例:npm
function say(word){
console.log(word);
}
function execute(someFunction,value){
someFunction(value);
}
execute(say,'hello')
複製代碼
匿名函數設計模式
function execute(someFunction,value){
someFunction(value)
}
execute(function(word){
console.log(word)
},'hello');
複製代碼
示例Ⅱ 一樣的功能,不一樣的實現方式
//匿名函數
var http = require('http');
http.createServer(function(request,response){
response.writeHead(200,{"Content-Type":'text/plain'});
response.write("Hello world");
response.end();
}).listen(8000)
//先定義後傳遞
var http = require("http");
function onResquest(request,reponse){
response.writeHead(200,{"Content-Type":'text/plain'});
response.write("Hello World");
response.end();
}
http.createServer(onResquest).listen(8888);
複製代碼
咱們所須要的全部數據都會包含在request對象中,該對象做爲onRequest()回調函數的第一個參數傳遞。可是爲了解析這些數據,咱們須要額外的Node.JS模塊,他們分別是url 和querystring模塊
例如咱們 訪問 http://localhost:8888/start?foo=bar&hello=world
url.parse(string).query
|
url.parse(string).pathname |
| |
| |
------ -------------------
http://localhost:8888/start?foo=bar&hello=world
--- -----
| |
| |
querystring.parse(queryString)["foo"] |
|
querystring.parse(queryString)["hello"]
複製代碼
//server.js
var http = require("http");
var url = require("url");
function start(route) {
function onRequest(request, response) {
var pathname = url.parse(request.url).pathname;
//console.log("Request for " + pathname + " received.");
route(pathname,response);
}
http.createServer(onRequest).listen(8888);
console.log("Server has started.");
}
exports.start = start;
//router.js
function route(pathname,response) {
if(pathname == '/'){
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
}else if(pathname == "/index/home"){
response.end('index');
}else{
response.end('index');
}
}
exports.route = route;
//app.js
var server = require("./server");
var router = require("./router");
server.start(router.route);
複製代碼
var http = require('http');
var url = require('url');
var util = require('util'); //幫助類
http.createServer(function(req, res){
res.writeHead(200, {'Content-Type': 'text/plain; charset=utf-8'});
res.end(util.inspect(url.parse(req.url, true)));
}).listen(3000);
複製代碼
var http = require('http');
var querystring = require('querystring');
var util = require('util');
http.createServer(function(req, res){
// 定義了一個post變量,用於暫存請求體的信息
var post = '';
// 經過req的data事件監聽函數,每當接受到請求體的數據,就累加到post變量中
req.on('data', function(chunk){
post += chunk;
});
// 在end事件觸發後,經過querystring.parse將post解析爲真正的POST請求格式,而後向客戶端返回。
req.on('end', function(){
post = querystring.parse(post);
res.end(util.inspect(post));
});
}).listen(3000);
複製代碼
global 就是nodejs的全局對象 類比javascript的window
__filename __filename 表示當前正在執行的腳本的文件名。它將輸出文件所在位置的絕對路徑,且和命令行參數所指定的文件名不必定相同。 若是在模塊中,返回的值是模塊文件的路徑。
__dirname __dirname 表示當前執行腳本所在的目錄。
setTimeout(cb, ms) setTimeout(cb, ms) 全局函數在指定的毫秒(ms)數後執行指定函數(cb)。:setTimeout() 只執行一次指定函數。返回一個表明定時器的句柄值。
clearTimeout(t) clearTimeout( t ) 全局函數用於中止一個以前經過 setTimeout() 建立的定時器。 參數 t 是經過 setTimeout() 函數建立的定時器。
setInterval(cb, ms) setInterval(cb, ms) 全局函數在指定的毫秒(ms)數後執行指定函數(cb)。返回一個表明定時器的句柄值。可使用 clearInterval(t) 函數來清除定時器。setInterval() 方法會不停地調用函數,直到 clearInterval() 被調用或窗口被關閉。
process process 是一個全局變量,即 global 對象的屬性。它用於描述當前Node.js 進程狀態的對象,提供了一個與操做系統的簡單接口。一般在你寫本地命令行程序的時候,少不了要 和它打交道。下面將會介紹 process 對象的一些最經常使用的成員方法。
工具util
underscore.js
var fs = require("fs");
// 異步讀取
fs.readFile('input.txt', function (err, data) {
if (err) {
return console.error(err);
}
console.log("異步讀取: " + data.toString());
});
// 同步讀取
var data = fs.readFileSync('input.txt');
console.log("同步讀取: " + data.toString());
console.log("程序執行完畢。");
複製代碼
fs.open(path, flags[, mode], callback) 參數說明:
fs.stat(path, callback) 參數說明
fs.writeFile(file, data[, options], callback)
var fs = require("fs");
console.log("準備寫入文件");
fs.writeFile('input.txt', '我是通 過fs.writeFile 寫入文件的內容', function(err) {
if (err) {
return console.error(err);
}
console.log("數據寫入成功!");
console.log("--------我是分割線-------------")
console.log("讀取寫入的數據!");
fs.readFile('input.txt', function (err, data) {
if (err) {
return console.error(err);
}
console.log("異步讀取文件數據: " + data.toString());
});
});
複製代碼
等等 方法 參考 菜鳥教程