node.js-连接

xiaoxiao2025-04-22  12

http

var http = require('http'); var requestHandler = function(request, response){ response.end('response is over'); }; var serverPort = 8888; var web = http.createServer(requestHandler); web.listen(serverPort); console.log('webServer running on http://localhost:8888');

require('http'):导入http模块

requestHandler:处理方法

response.end:处理结束标记,返回响应

createServer:创建服务器并指定处理方法

listen:指示监听端口

http是基本模块,express针对http进行了封装

更多开发采用express

更多信息可以查询http模块文档。

express

安装

express是第三方模块,不属于node的基本模块,需要额外安装。

MaxOS和Linux安装node不一定自带npm。

有可能需要自己手动安装和配置环境变量。

npm install -g express

npm源不太好用,可以使用cnpm

npm install cnpm -g --registry=https://registry.npm.taobao.org

安装时用cnpm,除此之外和npm用法一致

cnpm install -g express

安装好以后注意环境变量配置。

没有配置环境变量不影响基本模块使用,但是新模块存在下载完成导入失败的可能。

NODE_PATH = D:\software\nodejs\node_modules PATH = PATH;%NODE_PATH%

基本使用

var express = require('express'); var app = express(); app.get('/hello', function(request, response){ response.end('hello world!'); }); var serverPort = 8888; app.listen(serverPort, function(){ console.log('server running on http://localhost:8888'); });

require('express'):模块导入

express():创建应用

get:调用方式,指定访问路由,以及处理方法

listener:指定监听端口和回调函数

访问http://localhost:8888失败

访问http://localhost:8888/hello成功,hello world!。

静态文件 var express = require('express'); var app = express(); app.use(express.static('./static'));

use:指定使用的中间件

express.static:使用中间件,并指定静态文件夹

use使用中间件必须在get等处理方法之前,否则访问失败。

静态文件夹直接访问失败,但是可以直接访问静态文件夹内部文件。

路由 var express = require('express'); var app = express(); app.use(express.static('./static')); var router = express.Router(); router.get('/a', function(request, response){ response.end('this is page a'); }); router.get('/b', function(request, response){ response.end('this is page b'); }); app.use('/page', router); app.listen(8888, function(){ console.log('server running on http://localhost:8888'); });

get:指定路径和处理办法

Router:同样可以指定路由,单路由指定

use:引进路由中间件,可以进行路由管理

# 访问地址 http://localhost:8888/page/a http://localhost:8888/page/b

多级路由,可以通过类型,级别进行收纳处理,便于维护。

方式 var express = require('express'); var app = expres(); app.route('/route') .get(function(request, response){ response.end('this is get'); }) .post(function(request, response){ response.end('this is post'); }); app.listen(8888, function(){ console.log('server running on http://localhost:8888'); });

route:对于同一路径,可以制定不同请求方式的处理办法

# 发起http请求, 默认方式为GET curl http://localhost:8888/route # 声明指定提交方式未GET -X 指定提交方式 curl -X GET http://localhost:8888/route # 声明指定提交方式为POST curl -X POST http://localhost:8888/route 综合 var express = require('express'); var app = express(); var staticFilePath = './static'; // 静态文件 app.use(express.static(staticFilePath)); // 直接路径 app.get('/index', function(request, response){ response.end('this is index'); }); // route 同路径,多提交方式处理 app.route('/route') .get(function(request, response){ response.end('this is route.get'); }) .post(function(request, response){ response.end('this is route.post'); }); var router = express.Router(); // 路由收纳, 可用route多提交方式处理 router.route('/route') .get(function(request, response){ response.end('this is router.route.get'); }) .post(function(request, response){ response.end('this is router.route.post'); }); // 添加路由管理 app.use('/router', router); app.listen(8888, function(request, response){ console.log('server running on http://localhost:8888'); }); 静态文件路径设置路由管理多方式处理

后两种随意组合

参数获取 路径参数 var express require('express'); var app = express(); app.param('name', function(request, response, next, name){ console.log('receive name ' + name); request.name = name; cosole.log('set name into request'); next(); console.log('do next'); }); app.get('/param/:name', function(request, response){ response.end('get name from request: ' + request.name); }); app.listen(8888, function(){ console.log('server running on http://localhost:8888'); });

param:指定拦截参数的处理办法

request:请求

response:响应

next:继续,放行,相当于java过滤器中的doFilter

name:参数的具体传输值

/param/:name:需提取的路径参数用:param的形式进行声明,设置的param方法会自动拦截处理。

# 访问路径 http://localhost:8888/param/godme param app.get('/param', function(request, response){ response.end('get name from request: ' + response.query.name); }); // GET POST 都可以 # 访问路径 http://localhost/param?name=godme body var express = require('express'); var parser = require('body-parser'); var urlEncodedParser = parser.urlencoded({extended:false}); var jsonParser = parser.json() var app = express(); app.use(urlEncodedParser); app.use(jsonParser); app.post('/param', function(request, response){ console.log('body: ' + request.body); response.end('receive name : ' + request.body.name); })

直接访问,携带参数 {name : godme}。

日志 var morgan = require('morgan'); app.use(morgan());

morgan:日志模块

更多问题请翻阅教学文档,或者官方文档。

socket

server const net = require('net'); const host = '127.0.0.1'; const port = 8888; var server = net.createServer(function(socket){ console.log('connect success', socket.remoteAddress, socket.remotePort); socket.on('data', function(data){ console.log('receive from ', socker.remoteAddress, socket.remotePort); console.log('receive data ', data.toString()); socket.write('nice , i am godme too !'); }); }); server.listen(port, host, function(){ console.log('tcp server running on tcp://', host, port); })

net:tcp链接模块

const:导入的模块和特定变量,用const定义常量比较保险

createServer:创建server并设定回调函数

socket:server实际上就是socket管理器,具体操作在socket上进行设置

on:socket都是事件驱动,绑定特定事件并设置回调函数

write:socket写数据

listen:监听,并设置回调函数

data:tcp传输都是二进制字节,对应对象为buffer,想显示字符串需要toString

client const net = require('net'); const host = '127.0.0.1'; const port = 8888; var client = net.Socket(); client.on('data', function(data){ console.log('receive from server:', data.toString()); }) client.connect(port, host, function(){ console.log('connect to server', host, port); client.write('hello , i am godme!'); })

connect:发起连接动作。

port-host:比较怪异,先端口后地址,切记

总的来说,都是socket的调用。

管理

服务端作为socket的管理,因为可能面临多个链接。

事件

通过事件设定触发操作,具体围绕socket。

角色

服务器自动创建和管理socket,设定好动作即可。

客户端相当于就是一个socket,免去管理的问题。

更多方法可以参看文档。

转载请注明原文地址: https://www.6miu.com/read-5028860.html

最新回复(0)