无法连接到本地服务器中用Nodejs问题,怎么解决

无法连接到本地服务器中用Nodejs问题,怎么解决,第1张

搭建nodejs服务器步骤:

1安装nodejs服务(从官网下载安装),node相当于apache服务器

2在自己定义的目录下新建服务器文件如 serverjs

例如,我在E:\PhpProject\html5\websocket下创建了serverjs文件

var http = require('http');//引入http模块//开启服务,监听8888端口//端口号最好为6000以上var server = httpcreateServer(function(req,res){

/

req用来接受客户端数据

res用来向客户端发送服务器数据

/

consolelog('有客户端连接');//创建连接成功显示在后台

//一参是http请求状态,200连接成功

//连接成功后向客户端写入头信息

reswriteHeader(200,{ 'content-type' : 'text/html;charset="utf-8"'

});

reswrite('这是正文部分');//显示给客户端

resend();

})listen(8888);

consolelog('服务器开启成功');123456789101112131415161718192021222324

3在cmd控制台中cd切换进serverjs所在的目录,然后执行node serverjs命令

当控制台显示”服务器开启成功”则说明node服务器已经建立

4在浏览器中访问服务器

在浏览器中输入

localhost:8888 , 浏览器显示“这是正文部分”。

查看cmd控制台,显示 “有客户端连接”

可在多个浏览器窗口中进行以上 *** 作,每个浏览器窗口均会对应一次“有客户端连接”

以上步骤完成,node服务搭建完毕。下面是如何通过搭建的node服务访问本地站点的 text/html文本文件

访问本地站点文件

1在自定义的目录下创建node服务文件server2js

var http = require('http');var fs = require('fs');//引入文件读取模块var documentRoot = 'E:/PhpProject/html5/websocket/www';//需要访问的文件的存放目录var server= httpcreateServer(function(req,res){

var url = requrl;

//客户端输入的url,例如如果输入localhost:8888/indexhtml

//那么这里的url == /indexhtml

var file = documentRoot + url;

consolelog(url); //E:/PhpProject/html5/websocket/www/indexhtml

fsreadFile( file , function(err,data){

/

一参为文件路径

二参为回调函数

回调函数的一参为读取错误返回的信息,返回空就没有错误

二参为读取成功返回的文本内容

/

if(err){

reswriteHeader(404,{ 'content-type' : 'text/html;charset="utf-8"'

});

reswrite('<h1>404错误</h1><p>你要找的页面不存在</p>');

resend();

}else{

reswriteHeader(200,{ 'content-type' : 'text/html;charset="utf-8"'

});

reswrite(data);//将indexhtml显示在客户端

resend();

}

});

})listen(8888);

consolelog('服务器开启成功');12345678910111213141516171819202122232425262728293031323334353637383940414243444546

2创建indexhtml文件

如果要访问indexhtml文件,当然你得先有这个文件,不然服务器读取失败,返回40412

3在cmd控制台cd切换到 server2js的目录下执行node server2js命令

开启服务器

4在浏览器输入localhost:8888/indexhtml访问 该文件

$ajax({url:"(你要请求的url地址)",data:{"key1":"value1","key2":"value2"},type:"post",//此处传递方式可以是get也可以是postdataType:"json",//后台要返回的数据形式success:function(data){//请求成功的要执行的回调函数cajax请求接口怎么获得返回数据

Nodejs 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Nodejs 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。Nodejs 的包管理器 npm,是全球最大的开源库生态系统。(nodejs官网上的介绍),正如官网上介绍的那样,nodejs确实很牛!怎么个牛法?看看下面的代码就知道了。

//引入http模块

var http = require("http");

//设置主机名

var hostName = '127001';

//设置端口

var port = 8080;

//创建服务

var server = httpcreateServer(function(req,res){

ressetHeader('Content-Type','text/plain');

resend("hello nodejs");

});

serverlisten(port,hostName,function(){

consolelog(`服务器运行在http://${hostName}:${port}`);

});

短短几行代码就把一个简单的web服务器搭建完成了,为了验证效果,我们在浏览器请求,结果如下

运行成功!

到此为止,一个web服务器就建立成功了! 没错就是这么简单,然后我们就可以写个html界面愉快的玩耍了,哈哈哈!果断的写了一个html页面来请求一下我们的web服务器。

代码简单,点击p获取数据并将服务器返回的数据展示。好了,我们运行一下demohtml文件,我擦来!居然出现了……

很明显,通过jquery请求不到数据,这是因为跨域请求的原因。我们的web服务器并不支持跨域请求,所以报错了。解决方式:在服务器的响应头文件里加上如下代码:

再次重启服务器,运行demohtml,显示结果很是令人欣喜!

通常请求服务器都会拼接参数的,最常用的就是get请求,post请求。很明显,我们现在的代码还不能支持。express框架很好的封装了nodejs的http模块,使我们用起来非常的简单。

引入express :$ cnpm install express –save

使用方式变化不大,通过express()方法开启服务,然后在通过get方法来设置匹配参数的路由,通过在回调函数的req中可以获取请求参数和地址。post请求也是类似,不过有不同的是,post请求在获取参数的时候要引入body-parser 中间件,用于处理 JSON, Raw, Text 和 URL 编码的数据。

运行结果:

完整的get以及post请求就是以上了。下一篇文章会结果fs文件模块介绍http是如何返回文件的,敬请期待!!

学习从来不是一个人的事情,要有个相互监督的伙伴,想要学习或交流前端问题的小伙伴可以私信“学习”小明加群获取2019web前端最新入门资料,一起学习,一起成长!

node里几乎所有用到回调函数的地方,都是异步的,回调函数后面的代码很可能比回调函数中的代码后先执行,特别是数据库 *** 作。当然,node也提供了同步版本的函数,例如文件 *** 作,fsreadFileSync()是fsreadFile()的同步版本。

那么问题来了,forEach()是不是异步的呢?按理说,没有加Sync,应该是异步的呀。

复制代码 代码如下:

var arr = ['a', 'b', 'c'];

var str = '123';

arrforEach(function(item) {

str += item;

while (true) {}; //用一个死循环,卡死它~~

});

consolelog(str);

运行上面的代码,结果它就这么卡死了,没有任何输出。。

所以说,node里的forEach()是同步的!!

第一次用node的时候,没有考虑过这个问题,按同步的写了,写突然想到,测试后虚惊一场,以为以前的代码都写错了。

按照常规,去执行npm start

或者在Terminal中手动输入命令,结果如下:

可以看到是执行了test/packagejson文件中的 start 命令,初始packagejsonjson文件内容如下:

执行 start ,对应的命令为 node /bin/www 并在命令行执行。现在项目已经启动成功了,可以打开浏览器输入 localhost:3000 查看一下,但是本次侧重点在于项目启动时候发生的完整的过程。所以……

那么我们需要看一下 /bin/www 文件

通过 require() 来引入本地安装的包,这里加载了三个包 app、debug 、http ,主要关注一下appjs

可以看到app加载的为该项目基础组件,核心为 var app = express(); 看一下expressjs

将app用到的中间件等暴露出来,所以 app = express() 实际上就是加载应用基础组件,生成项目的根节点(当然这个节点是复合的)。所以在appjs中,进行的是加载应用基础组件并进行应用设置初始化(包含了视图目录设置、页面模板引擎设置、中间件的设置、静态资源目录设置以及错误捕捉相关内容)。

继续回到 wwwjs ,同样将debug配置、http相关组件进行加载。继而是默认端口号的设定。通过httpcreateServer(app),创建应用服务相关信息,并对端口进行监听。

浏览器输入 localhost:3000

控制台显示:

说明在以 GET 方式请求URI为 "/" 的资源,并以 GET 方式请求 /stylesheets/stylecss 资源,这个发生在appjs中我们设定的资源请求。

我们来看下 /routes/index 文件

即定义网站主页的路由

使用 expressRouter 类创建模块化、可挂载的路由句柄(简称:路由模块)。Router 实例是一个完整的中间件和路由系统。最终,在应用中加载路由模块appuse('/', indexRouter);

通过 resrender 对视图进行渲染,上述为对indexejs的渲染。 ps:在appjs中已经设定了views的所在目录 。语法: resrender(view [,locals] [,callback])

示例:

区别:路由句柄

为请求处理提供多个回调函数,其行为类似 中间件 。唯一的区别是这些回调函数有可能调用 next('route') 方法跳至下一个同路由的回调函数而略过其他路由回调函数。路由句柄有多种形式,可以是一个函数、一个函数数组,或者是两者混合。

使用一个回调函数处理路由:

使用多个回调函数处理路由(记得指定 next 对象):

使用回调函数数组处理路由:

混合使用函数和函数数组处理路由:

区别:路由方法

一个路由示例:

路由方法源于 HTTP 请求方法,和 express 实例相关联。

获取express的一个实例 app ,通过路由方法(和HTTP请求对应),GET方式请求 "/"。详细的路由方法参考链接: 路由方法

Node JS是单线程应用程序,但它通过事件和回调概念,支持并发。 由于Node

JS每一个API是异步的,作为一个单独的线程,它使用异步函数调用,以保持并发性。Node

JS使用观察者模式。Node线程保持一个事件循环,每当任何任务得到完成,它触发这标志着该事件侦听器函数执行相应的事件。

事件驱动编程

Nodejs大量使用事件,这也是为何Nodejs是相当快相对于其他类似的技术。当Node启动其服务器,它可以简单地启动它的变量,声明的函数,然后简单地等待发生的事件。

在事件驱动的应用中,通常主循环监听事件,然后触发回调函数时被检测到这些事件之一。

尽管事件似乎类似于回调。不同之处在于如下事实,当异步函数返回其结果的回调函数被调用的地方作为对观察者模式的事件处理。

监听事件的功能作为观察员。每当一个事件被触发,它的监听函数就开始执行。Nodejs具有多个内置通过事件模块和用于将事件绑定和事件侦听,如下

EventEmitter类可用事件:

// Import events module

var events = require('events');

// Create an eventEmitter object

var eventEmitter = new eventsEventEmitter();

以下为事件处理程序绑定使用事件的语法:

// Bind event and even handler as follows

eventEmitteron('eventName', eventHandler);

我们可以通过编程触发一个事件,如下所示:

// Fire an event

eventEmitteremit('eventName');

例子

创建一个名为具有以下代码mainjs一个js文件:

// Import events module

var events = require('events');

// Create an eventEmitter object

var eventEmitter = new eventsEventEmitter();

// Create an event handler as follows

var connectHandler = function connected() {

consolelog('connection succesful');

// Fire the data_received event

eventEmitteremit('data_received');

}

// Bind the connection event with the handler

eventEmitteron('connection', connectHandler);

// Bind the data_received event with the anonymous function

eventEmitteron('data_received', function(){

consolelog('data received succesfully');

});

// Fire the connection event

eventEmitteremit('connection');

consolelog("Program Ended");

现在让我们试着运行上面的程序作为检查的输出:

$ mnode mainjs

这将产生以下结果:

connection succesful

data received succesfully

Program Ended

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/12458378.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-23
下一篇2023-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存