$ d: $ cd git $ git clone https://github.com/cnpm/nvmw.git
set "PATH=d:\git\nvmw;%PATH%"
$ nvmw Usage: nvmw help Show this message nvmw install [version] Download and install a [version] nvmw uninstall [version] Uninstall a [version] nvmw use [version] Modify PATH to use [version] nvmw ls List installed versions Example: nvmw install v0.6.0 Install a specific version number nvmw use v0.6.0 Use the specific version
$ nvmw install 0.12.0
例如:下載koa $ npm install koa --registry=http://registry.npm.taobao.org
$ npm install cnpm -g --registry=http://registry.npm.taobao.org
express server
cd server node bin/www
http://localhost:3000/
var express = require('express'); // 調用 express 實例,它是一個函數,不帶參數調用時,會返回一個 express 實例,將這個變量賦予 app 變量。 var app = express(); // app 自己有不少方法,其中包括最經常使用的 get、post、put/patch、delete,在這裏咱們調用其中的 get 方法,爲咱們的 `/` 路徑指定一個 handler 函數。 // 這個 handler 函數會接收 req 和 res 兩個對象,他們分別是請求的 request 和 response。 // request 中包含了瀏覽器傳來的各類信息,好比 query 啊,body 啊,headers 啊之類的,均可以經過 req 對象訪問到。 // res 對象,咱們通常不從裏面取信息,而是經過它來定製咱們向瀏覽器輸出的信息,好比 header 信息,好比想要向瀏覽器輸出的內容。這裏咱們調用了它的 #send 方法,向瀏覽器輸出一個字符串。 app.get('/', function (req, res) { res.send('Hello World'); }); // 定義好咱們 app 的行爲以後,讓它監聽本地的 3000 端口。這裏的第二個函數是個回調函數,會在 listen 動做成功後執行,咱們這裏執行了一個命令行輸出操做,告訴咱們監聽動做已完成。 app.listen(3000, function () { console.log('app is listening at port 3000'); });
// 引入依賴 var express = require('express'); var utility = require('utility'); // 創建 express 實例 var app = express(); app.get('/', function (req, res) { // 從 req.query 中取出咱們的 q 參數。 // 若是是 post 傳來的 body 數據,則是在 req.body 裏面,不過 express 默認不處理 body 中的信息,須要引入 https://github.com/expressjs/body-parser 這個中間件纔會處理,這個後面會講到。 // 若是分不清什麼是 query,什麼是 body 的話,那就須要補一下 http 的知識了 var q = req.query.q; // 調用 utility.md5 方法,獲得 md5 以後的值 // 之因此使用 utility 這個庫來生成 md5 值,其實只是習慣問題。每一個人都有本身習慣的技術堆棧, // 我剛入職阿里的時候跟着蘇千和樸靈混,因此也混到了很多他們的技術堆棧,僅此而已。 // utility 的 github 地址:https://github.com/node-modules/utility // 裏面定義了不少經常使用且比較雜的輔助方法,能夠去看看 var md5Value = utility.md5(q); res.send(md5Value); }); app.listen(3000, function (req, res) { console.log('app is running at port 3000'); });
const express = require('express'); const superagent = require('superagent'); const cheerio = require('cheerio'); const app = express(); app.get('/', function (req, res, next) { // 用 superagent 去抓取 https://cnodejs.org/ 的內容 superagent.get('https://cnodejs.org/') .end(function (err, sres) { // 常規的錯誤處理 if (err) { return next(err); } // sres.text 裏面存儲着網頁的 html 內容,將它傳給 cheerio.load 以後 // 就能夠獲得一個實現了 jquery 接口的變量,咱們習慣性地將它命名爲 `$` // 剩下就都是 jquery 的內容了 var $ = cheerio.load(sres.text); var items = []; $('#topic_list .topic_title').each(function (idx, element) { var $element = $(element); items.push({ title: $element.attr('title'), href: $element.attr('href') }); }); res.send(items); }); }); app.listen(3000, function () { console.log('app is listening at port 3000'); });
const express = require('express'); const logger = require('morgan'); const app = express(); app.use(logger('short')); app.use((req,res)=>{ res.writeHead(200, {"Content-Type": "text/plain"}); res.end('vb, vb') }) app.listen(3000,()=>{ console.log('兼聽成功'); })
const express = require('express'); const path = require('path'); const app = express(); const pulbicPath = path.resolve(__dirname, "public"); app.use(express.static(pulbicPath)); app.use((req,res) =>{ res.writeHead(200, { "Content-Type": "text/plain" }); res.end("Looks like you didn't find a static file."); }) app.listen(3000,()=>{ console.log("兼聽成功"); })
const express = require('express'); const logger = require('morgan'); const path = require('path'); const app = express(); //獲取輸出日誌信息 app.use(logger('short')); // 全部的請求經過這個中間件,若是沒有文件被找到的話會繼續前進 const publicPath = path.resolve(__dirname, "public"); app.use(express.static(publicPath)); // 當請求根目錄的時候被調用 app.get("/", (req, res) => { res.end("home"); }); app.get("/about", (req, res) => { res.end("about"); }); app.get("/other", (req, res) => { res.end("ohter") }) //除了固定路由形式外,它還能夠匹配更復雜的路由(使用正則等方式): app.get("/home/:other", (req, res) => { // :other 並非固定住,它表示 URL 中傳遞過來的名字 res.end("hello"+req.params.other) }) // 前面都不匹配,則路由錯誤。返回 404 頁面 app.use((req, res) => { res.statusCode = 404; res.end("404"); }) app.listen(3000, () => { console.log("suceess!"); });
設置重定向 app.get("/my", (req, res) => { res.redirect("/home/my"); res.end("my=>redirect"); })
response.sendFile("path/to/cool_song.mp3")
var express = require("express"); var app = express(); var EVIL_IP = "123.45.67.89"; app.use(function(request, response, next) { if (request.ip === EVIL_IP) { response.status(401).send("Not allowed!"); } else { next(); } });
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Hello, world!</title> </head> <body> <%= message %> </body> </html>
const express = require('express') const path = require('path') const app = express(); // 告訴 Express 你的視圖存在於一個名爲 views 的文件夾中 app.set("views", path.resolve(__dirname, "views")) // 告訴 Express 你將使用EJS模板引擎 app.set("view engine", "ejs") app.get("/", (req, res) => { res.render('index', { message: "hello ejs" }) }) app.listen(3000, () => { console.log("susscess"); })
{ "name": "le", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "start": "node app" }, "author": "", "license": "ISC", "dependencies": { } }
const express = require("express"); const path = require("path"); const logger = require("morgan"); const bodyParser = require("body-parser"); const app = express(); // 告訴 Express 你的視圖存在於一個名爲 views 的文件夾中 app.set("views", path.resolve(__dirname, "views")) // 告訴 Express 你將使用EJS模板引擎 app.set("view engine", "ejs") //設置留言的全局變量 const entries = []; app.locals.entries = entries; //使用morgan 進行日誌記錄 app.use(logger("dev")); // 設置用戶表單提交動做信息的中間件,全部信息會保存在 req.body 裏 app.use(bodyParser.urlencoded({extended: false})); // 當訪問了網站根目錄,就渲染主頁(位於views/index.ejs) app.get("/", (req, res) => { res.render("index"); }) // 渲染「新留言」頁面(位於views/index.ejs)當get訪問這個URL的時候 app.get("/new-entry", (req, res) => { res.render("new-entry"); }) // POST 動做進行留言新建的路由處理 app.post("/new-entry", (req, res) => { // 若是用戶提交的表單沒有標題或者內容,則返回一個 400 的錯誤 if(!req.body.title || !req.body.body){ res.status(400).send("Entries must have a title and a body."); return; } // 添加新留言到 entries 中 entries.push({ title: req.body.title, content: req.body.body, published: new Date() }) // 重定向到主頁來查看你的新條目 res.redirect("/"); }) // 渲染404頁面,由於你請求了未知資源 app.use((req, res) => { res.status(404).render("404"); }) app.listen(3000, () => { console.log("susscess!"); })
4.新建文件夾view,在view中新建header.ejscss
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Express Demo</title> <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"> </head> <body class="container"> <h1> Express Guestbook <a href="/new-entry" class="btn btn-primary pull-right"> Write in the guestbook </a> </h1>
5.在views文件中新建footer.ejshtml
</body> </html>
6.在views文件中新建index.ejsnode
<% include header.ejs %> <% if (entries.length) { %> <% entries.forEach(function(entry) { %> <div class="panel panel-default"> <div class="panel-heading"> <div class="text-muted pull-right"> <%= entry.published %> </div> <%= entry.title %> </div> <div class="panel-body"> <%= entry.body %> </div> </div> <% }) %> <% } else { %> No entries! <a href="/new-entry">Add one!</a> <% } %> <% include footer.ejs %>
7.在views文件中新建new-entry.ejsjquery
<% include header %> <h2>Write a new entry</h2> <form method="post" role="form"> <div class="form-group"> <label for="title">Title</label> <input type="text" class="form-control" id="title" name="title" placeholder="Entry title" required> </div> <div class="form-group"> <label for="content">Entry text</label> <textarea class="form-control" id="body" name="body" placeholder="Love Express! It's a great tool for building websites." rows="3" required></textarea> </div> <div class="form-group"> <input type="submit" value="Post entry" class="btn btn-primary"> </div> </form> <% include footer %>
8.在views文件中新建404.ejsgit
<%include header.ejs%> <h2>404! Page not found.</h2> <%include footer.ejs%>