Ubuntu下,nodejs的初使用

本文详细介绍了在Ubuntu系统中如何安装和使用Node.js,包括包管理、模块、package.json的配置、版本号管理,以及Hello World示例、Web模块应用、Express框架的安装与路由设置、静态文件处理、GET和POST请求、文件上传和Cookie操作。同时,还讲解了使用Postman进行API测试的初步步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 安装

安装

sudo apt install nodejs
sudo apt install npm

查看版本

npm -v

升级

执行npm initnpm install之前先升级,不然容易出错。

npm install -g npm

2 使用

2.1 包

包的概念
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>	# 撤销发布

2.2 模块

本地安装

在当前项目的 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 clear

2.3 package.json

name - 包名。

version - 包的版本号。

description - 包的描述。

homepage - 包的官网 url 。

author - 包的作者姓名。

contributors - 包的其他贡献者姓名。

dependencies - 依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下。

repository - 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上。

main - 指定程序的主入口文件,require(‘moduleName’) 就会加载它。默认值是根目录下面的 index.js。

keywords - 关键字

2.4 版本号

NPM使用语义版本号来管理代码。

语义版本号构成:X.Y.Z

X:主版本号,Y:次版本号,Z:补丁版本号。

当代码变更时,版本号按以下原则更新。

如果只是修复bug,需要更新Z位。

如果是新增了功能,但是向下兼容,需要更新Y位。

如果有大变动,向下不兼容,需要更新X位。

申明第三方包依赖时,除了可依赖于一个固定版本号外,还可依赖于某个范围的版本号。

例如"argv": "0.0.x"表示依赖于0.0.x系列的最新版argv。

3 HelloWorld

创建包

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。

4 使用Web模块

服务端
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 文件的内容。

5 使用express

5.1 安装

–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 express

5.2 使用

express_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。

5.3 路由

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

5.4 静态文件

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,显示该图片。

5.5 GET

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,在输入框输入内容,提交,观察反馈。

5.6 POST

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,在输入框输入内容,提交,观察反馈。

5.7 文件上传

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,选择文件,提交,观察反馈。

5.8 cookie

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。

6 Postman的安装

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 的记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值