NodeJS(1):快速上手

这篇博客介绍了NodeJS的基础知识,包括npm安装、初始化package.json、导入模块和回调函数。深入讲解了事件驱动程序,特别是On和AddListener的事件绑定与触发。此外,还介绍了使用http模块创建服务端和客户端,以及Express框架的应用,包括GET和POST请求的处理。

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

02/18/2020

参考资料

基础

npm安装

npm install npm -g

npm install express
npm install fs
npm install events

-g表示全局下载,没有表示下载到本地文件夹

初始化package.json

npm init

创建package.json 文件

{
  "name": "hello",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",			//<-----main 函数
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"  //<---- 脚本,npm run test 等于执行 echo \"Error: no test specified\" && exit 1
  },
  "author": "",
  "license": "ISC",
  "dependencies": {				//<----模块
    "events": "^3.2.0"
  }
}

导入模块

var events = require('events'); #原生模块
var fs = require('fs')

var hello = require('./hello.js')  #相对路径的文件模块

回调函数

非阻塞I/O代码

var fs = require("fs");

fs.readFile('input.txt', function (err, data) {
    if (err) return console.error(err);
    console.log(data.toString());
});

console.log("程序执行结束!");

>程序执行结束!
>输出data

事件驱动程序–观察者模式

绑定/注册事件 On/AddListener

var events = require('events'); 
var emitter = new events.EventEmitter(); 
emitter.on('someEvent', function(arg1, arg2) { 
    console.log('listener1', arg1, arg2); 
}); 
emitter.on('someEvent', function(arg1, arg2) { 
    console.log('listener2', arg1, arg2); 
}); 
  1. 提问:on和AddListener的区别?

触发事件 Emit

emitter.emit('someEvent', 'arg1 参数', 'arg2 参数'); 

Web模块

使用http模块快速搭建服务端和客户端

服务端

var http = require('http');
var fs = require('fs');
var url = require('url');
 
 
// 创建服务器
http.createServer( function (request, response) {  
   // 解析请求,包括文件名
   var pathname = url.parse(request.url).pathname;  //获取网址信息 127.0.0.1:8080/index.html --> /index.html
   
   // 输出请求的文件名
   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(8080);
 
// 控制台会输出以下信息
console.log('Server running at http://127.0.0.1:8080/');
  • 页面展示
  • 提供数据库信息

客户端

var http = require('http');
 
// 用于请求的选项
var options = {
   host: 'localhost',
   port: '8080',
   path: '/index.html'  
};
 
// 处理响应的回调函数
var callback = function(response){
   // 不断更新数据
   var body = '';
   response.on('data', function(data) {
      body += data;
   });
   
   response.on('end', function() {
      // 数据接收完成
      console.log(body);
   });
}
// 向服务端发送请求,并且打印网址内容到cmd中
var req = http.request(options, callback);	
req.end();

Express模块

Express 框架核心特性:

  • 可以设置中间件来响应 HTTP 请求。

  • 定义了路由表用于执行不同的 HTTP 请求动作。

  • 可以通过向模板传递参数来动态渲染 HTML 页面。

//express_demo.js 文件
var express = require('express');
var app = express();
 
//app.get 访问GET路径
app.get('/', function (req, res) { 
   res.send('Hello World'); 	//然后返回hello world到页面中
})
 
 //监听8081端口
var server = app.listen(8081, function () {
 
  var host = server.address().address
  var port = server.address().port
 
  console.log("应用实例,访问地址为 http://%s:%s", host, port)
 
})

请求和响应

app.get('/', function (req, res) {
   // --
})
  • request对象表示HTTP请求,获取信息,比如路径,协议,URL等等
  • response对象表示TTP响应,即回复,接收到上述请求向客户端发送相关数据

例子1:GET


<html>
<body>
<form action="http://127.0.0.1:8081/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>

表单将会以GET形式发出,即http://127.0.0.1:8081/process_get?first_name=Qixiang&last_name=Liu,发送到process_get网址

//server.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.html" );		//返回
})
 
app.get('/process_get', function (req, res) {
 
   // 输出 JSON 格式,获取URL中键值对 first_name=XXX
   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(8081, function () {
 
  var host = server.address().address
  var port = server.address().port
 
  console.log("应用实例,访问地址为 http://%s:%s", host, port)
 
})

例子2:POST

URL中不显示信息
http://127.0.0.1:8081/process_get

var express = require('express');
var app = express();
var bodyParser = require('body-parser');
 
// 创建 application/x-www-form-urlencoded 编码解析
var urlencodedParser = bodyParser.urlencoded({ extended: false })	//解析
  
app.get('/index.html', function (req, res) {
   res.sendFile( __dirname + "/" + "index.html" );
})
 
app.post('/process_post', urlencodedParser, function (req, res) {
 
   // 输出 JSON 格式
   var response = {
       "first_name":req.body.first_name,		//获取文本body中的first_name
       "last_name":req.body.last_name
   };
   console.log(response);
   res.end(JSON.stringify(response));
})
 
var server = app.listen(8081, function () {
 
  var host = server.address().address
  var port = server.address().port
 
  console.log("应用实例,访问地址为 http://%s:%s", host, port)
 
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值