安装
sudo apt install nodejs sudo apt install npm查看版本
npm -v升级
执行npm init、npm install之前先升级,不然容易出错。
npm install -g npm包的概念 package(nodejs) = project(django)
准备目录
需要自行创建根目录,并进入 否则 nodejs 会把当前目录当成根目录 你显然不想让它把 home 目录搞得乱七八糟
mkdir learn-nodejs cd learn-nodejs创建包
在当前目录生成 package.json、node_modules
npm init填写的信息 test conmand :测试命令 repository :github库 keywords : github库的密码 其他信息从略
发布包
工作完成后,把文件推送到github仓库
npm publish # 发布 npm unpublish <package>@<version> # 撤销发布本地安装
在当前项目的 node_modules 子路径下安装
npm install express全局安装
在当前 nodejs 的安装路径下安装
npm install -g express全局安装 & 本地安装
全局安装用于命令行,本机使用 本地安装用于项目,随项目发布 我装nodejs干嘛来?当然是做项目,那就本地安装 发布前要在本地测试,那就全局安装 命令默认是本地,加个 -g变成全局
查看安装列表 全局
npm list -g全局以及本地
npm list grunt其他命令 卸载模块
npm uninstall express更新模块
npm update express搜索模块
npm search express清空缓存
npm cache clearname - 包名。
version - 包的版本号。
description - 包的描述。
homepage - 包的官网 url 。
author - 包的作者姓名。
contributors - 包的其他贡献者姓名。
dependencies - 依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下。
repository - 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上。
main - 指定程序的主入口文件,require(‘moduleName’) 就会加载它。默认值是根目录下面的 index.js。
keywords - 关键字
NPM使用语义版本号来管理代码。
语义版本号构成:X.Y.Z
X:主版本号,Y:次版本号,Z:补丁版本号。
当代码变更时,版本号按以下原则更新。
如果只是修复bug,需要更新Z位。
如果是新增了功能,但是向下兼容,需要更新Y位。
如果有大变动,向下不兼容,需要更新X位。
申明第三方包依赖时,除了可依赖于一个固定版本号外,还可依赖于某个范围的版本号。
例如"argv": "0.0.x"表示依赖于0.0.x系列的最新版argv。
创建包
mkdir learn-nodejs cd learn-nodejs npm init创建文件
vim helloworld.js输入内容
var http = require('http'); http.createServer(function (request, response) { // 发送 HTTP 头部 // HTTP 状态值: 200 : OK // 内容类型: text/plain response.writeHead(200, {'Content-Type': 'text/plain'}); // 发送响应数据 "Hello World" response.end('Hello World\n'); }).listen(8080); // 终端打印如下信息 console.log('Server running at http://127.0.0.1:8080/');执行命令
node helloworl.js用浏览器访问 http://127.0.0.1:8080/,显示Hello World。
服务端 server.js
var http = require('http'); var fs = require('fs'); var url = require('url'); // 创建服务器 http.createServer( function (request, response) { // 解析请求,包括文件名 var pathname = url.parse(request.url).pathname; // 输出请求的文件名 console.log("Request for " + pathname + " received."); // 从文件系统中读取请求的文件内容 fs.readFile(pathname.substr(1), function (err, data) { if (err) { console.log(err); // HTTP 状态码: 404 : NOT FOUND // Content Type: text/html response.writeHead(404, {'Content-Type': 'text/html'}); }else{ // HTTP 状态码: 200 : OK // Content Type: text/html response.writeHead(200, {'Content-Type': 'text/html'}); // 响应文件内容 response.write(data.toString()); } // 发送响应数据 response.end(); }); }).listen(8081); // 控制台会输出以下信息 console.log('Server running at http://127.0.0.1:8081/');index.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>菜鸟教程(runoob.com)</title> </head> <body> <h1>我的第一个标题</h1> <p>我的第一个段落。</p> </body> </html>客户端 client.js
var http = require('http'); // 用于请求的选项 var options = { host: 'localhost', port: '8081', path: '/index.html' }; // 处理响应的回调函数 var callback = function(response){ // 不断更新数据 var body = ''; response.on('data', function(data) { body += data; }); response.on('end', function() { // 数据接收完成 console.log(body); }); } // 向服务端发送请求 var req = http.request(options, callback); req.end();运行 运行服务端
node server.js通过浏览器访问 http://127.0.0.1:8081/index.html,显示 index.html 文件的内容。 另开一个窗口,运行客户端
node client.js以字符串形式得到 index.html 文件的内容。
–save 表示安装到生产环境,–save-dev 表示安装到开发环境 node.js 中间件,用于处理 JSON, Raw, Text 和 URL 编码的数据。 解析Cookie的工具。通过req.cookies可以取到传过来的cookie,并把它们转成对象。 node.js 中间件,用于处理 enctype=“multipart/form-data”(设置表单的MIME编码)的表单数据。
npm i express --save npm install body-parser --save npm install cookie-parser --save npm install multer --save查看已安装的包的列表
npm list expressexpress_demo.js
//express_demo.js 文件 var express = require('express'); var app = express(); app.get('/', function (req, res) { res.send('Hello World'); }) var server = app.listen(8082,'localhost',function () { var host = server.address().address var port = server.address().port console.log("应用实例,访问地址为 http://%s:%s", host, port) })执行
node express_demo.js用浏览器访问 http://127.0.0.1:8082,显示 Hello World。
express_route.js
var express = require('express'); var app = express(); // 主页输出 "Hello World" app.get('/', function (req, res) { console.log("主页 GET 请求"); res.send('Hello GET'); }) // POST 请求 app.post('/', function (req, res) { console.log("主页 POST 请求"); res.send('Hello POST'); }) // /del_user 页面响应 app.get('/del_user', function (req, res) { console.log("/del_user 响应 DELETE 请求"); res.send('删除页面'); }) // /list_user 页面 GET 请求 app.get('/list_user', function (req, res) { console.log("/list_user GET 请求"); res.send('用户列表页面'); }) // 对页面 abcd, abxcd, ab123cd, 等响应 GET 请求 app.get('/ab*cd', function(req, res) { console.log("/ab*cd GET 请求"); res.send('正则匹配'); }) var server = app.listen(8083,'localhost',function () { var host = server.address().address var port = server.address().port console.log("应用实例,访问地址为 http://%s:%s", host, port) })执行之。 用浏览器访问: http://127.0.0.1:8083/ http://127.0.0.1:8083/list_user http://127.0.0.1:8083/abcd http://127.0.0.1:8083/abcdefg
express_static.js
var express = require('express'); var app = express(); app.use('/public', express.static('public')); app.get('/', function (req, res) { res.send('Hello World'); }) var server = app.listen(8084,'localhost',function () { var host = server.address().address var port = server.address().port console.log("应用实例,访问地址为 http://%s:%s", host, port) })准备目录
mkdir public/images -p在该路径下放置图片 logo.png。
执行
node express_demo3.js访问 http://127.0.0.1:8084,显示Hello World。 用浏览器访问 http://127.0.0.1:8084/public/images/logo.png,显示该图片。
index_get.html
<html> <body> <form action="http://127.0.0.1:8085/process_get" method="GET"> First Name: <input type="text" name="first_name"> <br> Last Name: <input type="text" name="last_name"> <input type="submit" value="Submit"> </form> </body> </html>server_get.js
var express = require('express'); var app = express(); app.use('/public', express.static('public')); app.get('/index.html', function (req, res) { res.sendFile( __dirname + "/" + "index_get.html" ); }) app.get('/process_get', function (req, res) { // 输出 JSON 格式 var response = { "first_name":req.query.first_name, "last_name":req.query.last_name }; console.log(response); res.end(JSON.stringify(response)); }) var server = app.listen(8085,'localhost',function () { var host = server.address().address var port = server.address().port console.log("应用实例,访问地址为 http://%s:%s", host, port) })执行之。 用浏览器访问 http://127.0.0.1:8085/index.html,在输入框输入内容,提交,观察反馈。
index_post.html
<html> <body> <form action="http://127.0.0.1:8086/process_post" method="POST"> First Name: <input type="text" name="first_name"> <br> Last Name: <input type="text" name="last_name"> <input type="submit" value="Submit"> </form> </body> </html>server_post.js
var express = require('express'); var app = express(); var bodyParser = require('body-parser'); // 创建 application/x-www-form-urlencoded 编码解析 var urlencodedParser = bodyParser.urlencoded({ extended: false }) app.use('/public', express.static('public')); app.get('/index.html', function (req, res) { res.sendFile( __dirname + "/" + "index_post.html" ); }) app.post('/process_post', urlencodedParser, function (req, res) { // 输出 JSON 格式 var response = { "first_name":req.body.first_name, "last_name":req.body.last_name }; console.log(response); res.end(JSON.stringify(response)); }) var server = app.listen(8086,'localhost',function () { var host = server.address().address var port = server.address().port console.log("应用实例,访问地址为 http://%s:%s", host, port) })执行之。 用浏览器访问 http://127.0.0.1:8086/index.html,在输入框输入内容,提交,观察反馈。
index_upload.html
<html> <head> <title>文件上传表单</title> </head> <body> <h3>文件上传:</h3> 选择一个文件上传: <br /> <form action="/file_upload" method="post" enctype="multipart/form-data"> <input type="file" name="image" size="50" /> <br /> <input type="submit" value="上传文件" /> </form> </body> </html>server_upload.js
var express = require('express'); var app = express(); var fs = require("fs"); var bodyParser = require('body-parser'); var multer = require('multer'); app.use('/public', express.static('public')); app.use(bodyParser.urlencoded({ extended: false })); app.use(multer({ dest: '/tmp/'}).array('image')); app.get('/index.html', function (req, res) { res.sendFile( __dirname + "/" + "index_upload.html" ); }) app.post('/file_upload', function (req, res) { console.log(req.files[0]); // 上传的文件信息 var des_file = __dirname + "/" + req.files[0].originalname; fs.readFile( req.files[0].path, function (err, data) { fs.writeFile(des_file, data, function (err) { if( err ){ console.log( err ); }else{ response = { message:'File uploaded successfully', filename:req.files[0].originalname }; } console.log( response ); res.end( JSON.stringify( response ) ); }); }); }) var server = app.listen(8087,'localhost',function () { var host = server.address().address var port = server.address().port console.log("应用实例,访问地址为 http://%s:%s", host, port) })执行之。 用浏览器访问本机 http://127.0.0.1:8086/index.html,选择文件,提交,观察反馈。
express_cookie.js
// express_cookie.js 文件 var express = require('express') var cookieParser = require('cookie-parser') var util = require('util'); var app = express(); app.use(cookieParser()) app.get('/', function(req, res) { console.log("Cookies: " + util.inspect(req.cookies)); }) app.listen(8088)执行之,使用 Postman 向 http://127.0.0.1:8088 发送cookie。
Postman 的使用,必须配合Chrome。 以及 Chrome 的插件 interceptor。 interceptor 的安装必须连接 Chrome App Store。 连 Chrome App Store 需要连外网。
Postman 官网下载压缩包,解压后直接使用。 建立快捷方式:
sudo vim /usr/share/applications/postman.desktop文件内容
[Desktop Entry] Encoding=UTF-8 Name=Postman Exec=/opt/postman/Postman/Postman Icon=/opt/postman/Postman/app/resources/app/assets/icon.png Terminal=false Type=Application Categories=Development;其中 Exec、Icon 的内容据实修改。 保存后即可在左下角 applications 找到图标。
Chrome 下载deb包,使用dpkg命令安装。
sudo dpkg -i google-chrome-stable_current_amd64.deb用命令启动
/usr/bin/google-chrome-stable右键固定到 Favorites 即可。
interceptor 打开 Chrome,进入 App Store,搜索 interceptor,添加即可。 或者启动Post,点 cookie,跟随教程,自动安装。
使用Postman发送cookie 在 Header 下,添加 key,名为 cookie,值为键值对。可以添加多条 key 为 cookie 的记录。