http://www.ibm.com/developerworks/cn/web/1107_chengfu_nodejs/


使用 node.js 进行服务器端 JavaScript 编程

成 富, 高级软件工程师, IBM

简介: node.js 是一个可以使用 JavaScript 开发服务器端应用的平台。它依托于 Google V8 JavaScript 引擎,并采用事件 I/O 的架构,可以用来创建高性能服务器。本文详细介绍了 node.js 的基本知识、模块化的结构、事件驱动的机制以及常用的模块。

发布日期: 2011 年 7 月 21 日 
级别: 中级 
访问情况 : 13408 次浏览 
评论: 3 (查看 | 添加评论 -登录)

平均分 5 星 共 21 个评分 平均分(21个评分)
为本文评分

随着 Web 2.0 概念和 Ajax 技术的流行,JavaScript 作为 Ajax 应用开发中必不可少的一部分,已经得到了广泛的流行。开发人员也开始逐步的熟悉和掌握 JavaScript,并积累了相关的开发经验。虽然 JavaScript 目前主要用在 Web 应用中,以浏览器作为运行平台,但是已经有相关的尝试把 JavaScript 迁移到服务器端,这其中包括 Aptana 的 Jaxer 等。这种做法与 GoogleGWT 是异曲同工的。Google GWT 允许开发人员使用 Java 语言来编写 Web 前端代码。这两种做法的目的都是为了复用开发人员已经掌握的知识和积累的经验。在这点上,node.js 类似于 Jaxer。

简单的来说,node.js 是一个允许开发人员使用 JavaScript 语言编写服务器端代码的框架。也就是说编写的 JavaScript 代码可以直接运行在本地机器上,而不仅限于浏览器。从实现的角度来说,Jaxer 和 node.js 都使用了已有的 JavaScript 执行引擎。Jaxer 用的是 Mozilla Firefox 中使用的 JavaScript 引擎,而 node.js 用的则是 Google Chrome 中用的 V8 引擎。

node.js 入门

node.js 可以运行在 Linux、Windows 和 Macintosh 等主流的操作系统上。在 Windows 平台上运行 node.js 的话,需要 Cygwin 或是 MinGW 的支持。下面以常用的 Windows 平台为例来说明。首先需要安装 Cygwin。安装的时候需要选择 gcc-g++ 、make 、openssl 和 python 等包。gcc 的版本必须是最新的。接着从 参考资料 中给出的地址下载node.js 0.4.0 版本的源代码。下载解压之后,依次在 Cygwin 中运行 ./configure 、make 和 make install 等命令进行编译和安装。安装完成之后,直接运行 node 命令就可以启动node.js 提供的命令行。在命令行中可以直接输入 JavaScript 代码并运行。也可以通过node server.js 的方式来运行一个 JavaScript 文件 server.js 。

代码清单 1 中给出了一个简单的“Hello World”程序的示例。通过 node helloworld.js 来运行该 JavaScript 文件之后,会在控制台输出“Hello World”。


清单 1. 使用 node.js 的“Hello World”程序
 process.stdout.write("Hello World");

代码清单 1 中的 process 表示的是当前运行的 node.js 进程,其属性 stdout 表示的是进程的标准输出流。通过 write() 方法向给流中写入一个字符串。从 代码清单1 可以看到,使用 JavaScript 就可以访问标准输出流等本地系统上的资源。这从一个侧面反映出来了 node.js 的强大。

在 node.js 可以运行的 JavaScript 代码中,可以使用一些全局的对象:包括 代码清单 1 中用到的 process 、下面会介绍的用来加载模块的 require() 方法、表示当前正在执行的JavaScript 文件名的 __filename 、表示当前正在执行的 JavaScript 文件的目录的 __dirname 和与浏览器中相似的用来执行定时任务的 setTimeout() 和 setInterval() 方法等。

在介绍了 node.js 的基本知识之后,下面介绍 node.js 的模块化结构。

模块化结构

node.js 使用了 CommonJS 定义的模块系统。不同的功能组件被划分成不同的模块。应用可以根据自己的需要来选择使用合适的模块。每个模块都会暴露一些公共的方法或属性。模块使用者直接使用这些方法或属性即可,不需要关系模块内部的实现细节。除了系统预置的多个模块之外,应用开发团队也可以利用这个机制来将应用拆分成多个模块,以提高代码的可复用性。

使用模块

在 node.js 中使用一个模块的方式是非常简单的。使用某个模块之前需要首先声明对它的依赖。在 JavaScript 代码中可以直接使用全局函数 require() 来加载一个模块。如 require("http") 可以加载系统预置的 http 模块。而require("./myModule.js") 用来加载与当前JavaScript 文件同一目录下的 myModule.js 模块。如果使用 require() 的路径以“/”开头的话,则认为是模块 JavaScript 文件在操作系统上的绝对路径。如果不是这两种情况的话,node.js 就会尝试在当前 JavaScript 文件的父目录及其祖先目录下的 node_modules 目录下查找。比如目录 /usr/home/my.js 中调用了require("other.js") 的话,node.js会依次尝试查找下列文件:/usr/home/node_modules/other.js/usr/node_modules/other.js 和 /node_modules/other.js 。

require() 方法的返回值是该模块所暴露出来的公开 JavaScript 对象,包含了可供使用的方法和属性。代码清单 2 给出了模块的基本使用方式。


清单 2. 模块的基本使用方式
 var greetings = require("./greetings.js"); var msg = greetings.sayHello("Alex", "zh_CN"); process.stdout.write(msg);

如 代码清单 2 所示,一般是直接把 require() 方法的返回值赋值给一个变量,在 JavaScript 代码中直接使用此变量即可。greetings.js 模块暴露了一个 sayHello() 方法,当前JavaScript 代码直接使用了该方法。

开发自己的模块

开发自己的模块的基本工作是在模块对应的 JavaScript 文件中编写模块相关的代码。这其中封装了模块的内部处理逻辑。一般来说,一个模块通常会暴露一些公开的方法或属性给其使用者。模块的内部代码需要把这些方法或属性给暴露出来。代码清单 3 给出了 代码清单2 中所使用的 greetings.js 文件的内容。


清单 3. greetings.js 模块的内容
 var languages = { "zh_CN" : "你好,", "en" : "Hello, "};      exports.sayHello = function(name, language) { return languages[language] || languages["en"] + name; };

如 代码清单 3 所示,exports 对象的内容就是模块的使用者调用 require() 方法的返回值中所包含的内容。模块通过这种方式来声明其所暴露出来的公开方法和属性。在模块中定义的变量,如 languages ,是只对模块内部的代码可见的。

如果一个模块所包含的内容比较多,也可以用文件夹的方式来组织。可以在文件夹的根目录下面创建一个 package.json文件,其内容中包含了模块的名称和入口 JavaScript 文件的路径。如果没有提供这个 package.json 文件的话,node.js 会默认在文件夹中查找 index.js 文件作为模块的启动JavaScript 文件。

在介绍完 node.js 的模块化结构之后,下面介绍其事件驱动机制。

事件驱动

开发过 Web 应用的人都熟悉浏览器中的事件处理机制。当对某个 DOM 元素上的某类事件感兴趣的时候,只需要在该 DOM 元素上面注册一个事件监听器即可。如 ele.addEventListener("click", function() {}) 就添加了一个对 click 事件的监听器。当事件发生的时候,事件监听器的 JavaScript方法就会被调用。事件的处理方法是异步执行的。这种异步执行的方式非常适合于开发高性能并发网络应用。实际上,目前的高性能并发应用开发一般有两种做法:第一种是使用多线程的机制,另外一种就是采用基于事件驱动的方式。多线程的问题在于应用开发起来难度较高,很容易出现线程饥饿或是死锁等问题,对开发人员提出了更高的要求。而事件驱动的方式则更加灵活,很容易为 Web 开发人员所理解和使用,也不存在线程死锁等问题。依托于性能强大的 Google V8 引擎和先进的事件 I/O 架构,node.js 可以成为创建高性能服务器端应用的良好基础。

基于 node.js 开发应用与开发 Web 应用有相似的编程模型。很多模块都会暴露出一些事件,使用这些模块的代码通过注册事件监听器的方式来添加相应的处理逻辑。代码清单 4 中给出了一个简单的 HTTP 代理服务器的实现代码。


清单 4. HTTP 代理服务器
 var http = require("http"); var url = require("url"); http.createServer(function (req, res) { var urlObj = url.parse(req.url, true); // 获取被代理的 URL var urlToProxy = urlObj.query.url; if (!urlToProxy) { res.statusCode = 400; res.end("URL 是必须的。"); } else { console.log("处理代理请求:" + urlToProxy); var parsedUrl = url.parse(urlToProxy); var opt = { host : parsedUrl.hostname, port : parsedUrl.port || 80, path : (parsedUrl.pathname || "") + (parsedUrl.search || "") + (parsedUrl.hash || "") }; http.get(opt, function(pres) { // 请求被代理 URL 的内容res.statusCode = pres.statusCode; var headers = pres.headers; for (var key in headers) { res.setHeader(key, headers[key]); } pres.on("data", function(chunk) { res.write(chunk); // 写回数据}); pres.on("end", function() { res.end(); }); }); } }).listen(8088, "127.0.0.1"); console.log("代理服务器已经在 8088 端口启动。");

整个代理服务器的实现比较简单。首先通过 http 模块中的 createServer() 方法用来创建一个 HTTP 服务器,再通过listen() 方法就可以让该 HTTP 服务器在特定端口监听。在 createServer() 方法中传入的参数是HTTP 请求的响应方法。实际上,每个 HTTP 请求都是对应于 HTTP 服务器上的一个 request 事件。代码清单 4 中的 HTTP 服务器创建部分实际上等价于 代码清单5 中给出的实现方式。


清单 5. 使用事件机制的 HTTP 服务器创建方式
 var server = http.createServer(); server.on("request", function(req, res) { });

在请求的处理方法里面,通过 http.get() 方法来获取被代理 URL 的内容。这里同样采用了基于事件的处理方式。pres.on("data", function(chunk) {}) 在 pres 的 data 事件上添加了一个处理方法。该方法的作用是当获取到被代理URL 的内容的时候,就把获取到的内容写回到原始 HTTP 请求的响应中。对于 end 事件的处理也是同样的。在使用 node.js 进行开发的时候,会经常遇到这种使用事件处理方法和回调方法的场景。

在介绍了 node.js 的事件驱动机制之后,下面介绍一些常用的模块。

常用模块

node.js 默认提供了很多与网络与文件系统操作相关的模块。这些模块是构建服务器端应用的基础。下面对其中一些常见的模块进行具体说明。

事件模块

前面提到过,node.js 采用的是事件驱动的架构,其中的很多模块都会产生各种不同的事件,可以由模块使用者来添加事件处理方法。所有能够产生事件的对象都是事件模块中的 EventEmitter 类的实例。

EventEmitter 类中的方法都与事件的产生和处理相关,如下所示:

  • addListener(event, listener) 和 on(event, listener) :这两个方法的作用都是用来为某个事件 event 添加事件处理方法 listener 。
  • once(event, listener) :这个方法为某个事件 event 添加仅执行一次的处理方法 listener 。处理方法在执行一次之后就会被删除。
  • removeListener(event, listener) :该方法用来删除某个事件 event 上的处理方法 listener 。
  • emit(event, [arg1], [arg2], [...]) :该方法用来产生某个事件 event 。事件名称 event 之后的参数被传递给对应的事件处理方法。

代码清单 6 给出了事件模块的使用示例。


清单 6. 事件模块的使用示例
 var events = require("events"); var emitter = new events.EventEmitter(); emitter.on("myEvent", function(msg) { console.log(msg); }); emitter.emit("myEvent", "Hello World.");

在事件模块中有一个特殊的事件 error 。当出现错误的时候,EventEmitter 会产生此事件。如果此事件没有对应的处理方法的话,默认的行为是输出错误信息后,程序自动终止。因此,需要注意总是添加一个对 error 事件的处理方法。

node.js 中存在各式各样不同的数据流,包括文件系统、HTTP 请求和响应、以及 TCP/UDP 连接等。这些流都是EventEmitter 的实例,因此可以产生各种不同的事件。流可以分成只读、只写和读写流三种。

可读流主要会产生 4 个事件:

  • data :当读取到流中的数据时,产生此事件。
  • end :当流中没有数据可读时,产生此事件。
  • error :当读取数据出现错误时,产生此事件。
  • close :当流被关闭时,产生此事件。

除了上面的事件之外,还有一个 pipe() 方法可以用来把当前的可读流和另外一个可写流连接起来。可读流中的数据会被自动写入到可写流中。

可写流中最常用的是 write() 和 end() 两个方法。write() 方法用来向流中写入数据,而 end() 则用来结束写入操作。

为了表示二进制数据,node.js 使用了类 Buffer 来表示数据缓冲区,以对二进制数据进行操作。Buffer 类内部是以数组的方式来存储数据的。一旦创建出来之后,Buffer 的大小是不能被修改的。Buffer 类的实例是可以与JavaScript 中的字符串类型互相转换的。在转换的时候需要指定编码格式。通过 Buffer 类的 toString(encoding, start, end) 方法可以把 Buffer中的从 start 到 end 的内容转换成以 encoding 编码的字符串。可以支持的编码格式有:ascii 、utf8 和 base64 。通过 newBuffer(str, encoding) 可以用一个字符串 str 来初始化一个缓冲区。write(string, offset, encoding) 用来把一个字符串string 以编码格式 encoding 写入到缓冲区中以 offset 开始的位置上。

网络操作

node.js 提供了一些与网络操作相关的模块,包括 TCP、UDP 和 HTTP 等,可以实现网络服务器和客户端。

与 TCP 协议相关的实现在 net 模块中。通过该模块的 createServer(connectionListener) 方法可以创建一个 TCP 服务器。参数 connectionListener 是当有客户端连接到该服务器上时的处理方法,等价于对 connect 事件的处理。一个TCP 服务器是类 Server 的实例。通过 listen 方法可以让服务器在指定端口监听。

如果想连接到一个已有的 TCP 服务器的话,可以使用 createConnection(port, host) 方法来连接到指定主机 host 的端口port 上。该方法的返回值是 Socket 类的实例,表示一个套接字连接。得到一个 Socket 类的实例之后,就可以通过write() 方法来向该连接中写入数据。如果想从该连接上获取数据的话,可以添加 data 事件的处理方法。

代码清单 7 中给出了一个简单的用来进行表达式计算的 TCP 服务器,可以通过 telnet 命令连接到此服务器来进行测试。


清单 7. 简单的表达式计算服务器
 var net = require("net"); var server = net.createServer(function(socket) { socket.setEncoding("utf8"); var buffer = [], len = 0; socket.on("data", function(data) { // 接收到客户端数据if (data.charCodeAt(0) == 13) { var expr = buffer.join(""); try { var result = eval(expr); // 进行计算socket.write(result.toString()); // 写回结果} catch (e) { socket.write("Wrong expression."); } finally { socket.write("\r\n"); buffer = []; } } else { buffer.push(data); } }); }); server.listen(8180, "127.0.0.1"); console.log("服务器已经在端口 8180 启动。");

除了 TCP 服务器外,模块 http 和 https 可以分别实现 HTTP 和 HTTPS 服务器,模块 dgram 可以实现 UDP/Datagram 套接字连接,模块 tls 可以实现安全的套接字连接(SSL)。这些模块的使用方式都类似于模块 tcp 。

文件系统

node.js 中的 fs 模块用来对本地文件系统进行操作。fs 模块中提供的方法可以用来执行基本的文件操作,包括读、写、重命名、创建和删除目录以及获取文件元数据等。每个操作文件的方法都有同步和异步两个版本。异步操作的版本都会使用一个回调方法作为最后一个参数。当操作完成的时候,该回调方法会被调用。而回调方法的第一个参数总是保留为操作时可能出现的异常。如果操作正确成功,则第一个参数的值是 null 或 undefined 。而同步操作的版本的方法名称则是在对应的异步方法之后加上一个 Sync 作为后缀。比如异步的 rename() 方法的同步版本是 renameSync() 。下面列出来了fs 模块中的一些常用方法,都只介绍异步操作的版本。

  • rename(path1, path2) :将路径 path1 表示的目录或文件重命名成路径 path2 。
  • truncate(fd, len) :将文件描述符 fd 对应的文件的长度截断为 len 。
  • chmod(path, mode) :将路径 path 表示的目录或文件的权限修改为 mode 。
  • stat(path) :获取路径 path 表示的目录或文件的元数据。元数据用 Stats 类来表示。
  • open(path, flags, mode) :打开一个路径 path 表示的文件。回调方法中可以得到该文件的描述符。
  • read(fd, buffer, offset, length, position) :读取给定文件描述符 fd 所表示的文件中从 position 位置开始的长度为 length 字节的数据,并存放到缓冲区 buffer 中从 offset 起始的位置上。回调方法中可以得到实际读取的字节数。
  • write(fd, buffer, offset, length, position) :将缓冲区 buffer 中的数据写入到文件描述符 fd 所表示的文件中。参数的含义与 read() 方法一样。回调方法中可以得到实际写入的字节数。
  • readFile(filename, encoding) :以编码格式 encoding 来读取一个文件 filename 中的内容。回调方法中可以得到文件的内容。
  • writeFile(filename, data, encoding) :将数据 data 以编码格式 encoding 写入到文件 filename 中。

除了上面列出来的直接操作文件本身的方法外,还可以把文件转换成流。createReadStream(path, options) 和createWriteStream(path, options) 分别用来从文件中创建可读和可写流。参数 path 表示的是文件的路径,options 是一个表示读取或写入文件时的选项的JavaScript 对象。

代码清单 8 中给出了一个简单的 HTTP 静态文件服务器的实现。


清单 8. HTTP 静态文件服务器
 var http = require("http"), fs = require("fs"), path = require("path"), url = require("url"); var server = http.createServer(function(req, res) { var pathname = url.parse(req.url).pathname; var filepath = path.join("/tmp", "wwwroot", pathname); var stream = fs.createReadStream(filepath, {flags : "r", encoding : null}); stream.on("error", function() { res.writeHead(404); res.end(); }); stream.pipe(res); }); server.on("error", function(error) { console.log(error); }); server.listen(8088, "127.0.0.1");

如 代码清单 8 所示,首先把 HTTP 请求的路径转换成服务器上文件路径,再从文件中创建可读流,最后通过 pipe() 方法把文件的数据流传递到 HTTP 请求的响应中。

辅助模块

除了上面介绍的这些常见模块之外,node.js 还提供了一些辅助的模块。

模块 path 用来处理文件系统上的路径。这个模块中的 join() 用来把多个路径连接起来,形成一个完整的路径。如join("/usr", "home", "test/index.html") 的结果是路径 /usr/home/test/index.html 。normalize() 用来对路径进行归一化操作,去掉其中多余的“/”以及处理“..”和“.”。resolve([from...], to) 方法用来获取给定路径 to 的绝对路径。如果 to 不是绝对路径,就把它之前的参数按从右到左的顺序添加上去,直到得到了一个绝对路径。如果到最后还是无法得到绝对路径,就把当前的工作目录加上。假设当前的工作目录是 /usr/home ,那么 resolve("test","index.html") 的返回结果是/usr/home/test/index.html 。dirname() 方法用来获取路径的目录部分。如 dirname("/usr/home/index.html") 的返回结果是/usr/home 。basename() 用来获取路径的最后一个部分。如 basename("/usr/home/index.html") 的返回结果是 index.htmlextname() 用来获取一个路径的文件扩展名部分。如 extname("/usr/home/index.html") 的返回结果是 .html 。

模块 url 用来对 URL 进行解析。parse(urlStr, parseQueryString) 方法用来把一个 URL 字符串 urlStr 解析成主机名、端口和路径等几个部分。该方法的返回值是一个包含了 protocol 、hostname 、port 、pathname 和 query 等属性的JavaScript 对象。如果参数 parseQueryString 的值为 true 的话,URL 中包含的查询字符串部分也会被解析。format(urlObj) 方法的作用与 parse() 方法正好相反,用来从一个JavaScript 对象中构建出 URL 字符串。

模块 querystring 用来处理 URL 中的查询字符串。stringify(obj) 方法用来把一个 JavaScript 对象 obj 转换成查询字符串的格式。如 stringify({a: 1, b : "good"}) 的返回结果是 a=1&b=good 。parse(str) 用来把一个查询字符串解析成 JavaScript 对象。

模块 vm 可以用来执行 JavaScript 代码。方法 runInThisContext(code) 用来执行一段 JavaScript 代码 code 并返回其结果。通过该方法运行的 JavaScript 代码不能访问当前代码的作用域。runInNewContext(code,[sandbox]) 方法也是用来执行 JavaScript 代码的,与 runInThisContext() 不同的是通过该方法运行的 JavaScript 代码使用 sandbox 对象作为全局对象。如runInNewContext("a+ 3", {a : 4}) 的返回结果是 7。createScript(code) 方法用来预先编译一段 JavaScript 代码,但是并不立即执行。该方法的返回值是一个 Script 对象。该对象同样有 runInThisContext() 和 runInNewContext([sandbox]) 两个方法,含义与上面提到的两个方法类似。

模块 os 提供了与底层操作系统相关的一些信息。包括 hostname() 用来获取操作系统的主机名;type() 用来获取操作系统的类型;release() 用来获取操作系统的发行版本号;uptime() 用来获取以秒计算的系统运行时间;cpus() 用来获取CPU 的相关信息。freemem() 和 totalmem() 分别用来获取系统的内存总数和可用内存数。

模块 util 提供了一些常用的辅助方法。debug(string) 方法用来输出信息到标准错误流。log(string) 方法用来输出附带时间戳的信息到标准输出流。inspect(object,showHidden, depth) 方法用来输出一个对象的内部结构,参数 object 是要查看的对象,showHidden 表示是否查看对象的隐藏属性,depth 表示查看的对象层次结构的深度,默认值是 2。inherits(constructor,superConstructor) 方法用来实现 JavaScript 中基于原型的继承机制。

在介绍完 node.js 提供的常用模块之后,下面通过一个完整的示例来说明 node.js 的用法。

实例分析

这个实例实现的功能是动态监测服务器的内存使用状态,即内存的占用率。获取服务器上的内存占用率比较简单,只需要使用 os 模块提供的方法即可,即 freemem()/totalmem() 。为了能够实时的监测内存占有率,服务器需要实时的把数据传输给浏览器端。这里最好的实现方式是 HTML 5 中引入的 WebSocket 规范。该规范在Firefox 4 和 Google Chrome 等新浏览器上得到了支持。同时服务器端也需要支持此规范。Socket.IO 在 node.js 上提供了对 WebSocket 规范的支持,包括服务器端和浏览器端代码。代码清单 9 给出了使用 Socket.IO 的服务器端代码。


清单 9. 监测内存占用率的服务器端代码
 var io = require('./socket.io'); var io = io.listen(server); io.on("connection", function(client){ setInterval(function() { client.send(os.freemem() / os.totalmem()); }, 500); });

在 代码清单 9 中,server 是 node.js 中的一个 HTTP 服务器对象,用来响应一般的 HTTP 请求。Socket.IO 可以对 node.js 的 HTTP 服务器的请求进行拦截,将部分请求交给Socket.IO 来处理。这里的处理逻辑是当有客户端连接上的时候,就每隔 500 毫秒把服务器的内存占用率发送给客户端。代码清单 10 给出了浏览器端的 HTML 和 JavaScript 代码。


清单 10. 监测内存占用率的浏览器端代码
 <!doctype html> <html> <head> <title> 服务器内存使用情况 </title> <script src="/socket.io/socket.io.js"></script> <style> #usage {border : 1px dashed green;} </style> <script> var canvas, width = 200, height = 200, buffer = [], max = 200; function updateChart(data) { if (buffer.length >= max) { buffer.unshift(); } buffer.push(data); var ctx = canvas.getContext("2d"); ctx.clearRect(0, 0, width, height); for (var i = 1, n = buffer.length; i < n; i++) { ctx.strokeStyle = "red"; ctx.beginPath(); ctx.moveTo(i - 1 , buffer[i - 1] * height); ctx.lineTo(i, buffer[i] * height); ctx.closePath(); ctx.stroke(); } } function onLoad() { canvas = document.getElementById("usage"); var socket = new io.Socket(null, {port: 8088}); socket.connect(); // 连接到服务器socket.on("message", function(obj){ // 接收到消息时的处理方法updateChart(obj); }); } </script> </head> <body οnlοad="onLoad();"> <h1> 内存使用情况 </h1>   <canvas id="usage" width="200" height="200"></canvas> </body> </html>

如 代码清单 10 所示,首先建立一个与服务器之间的 WebSocket 连接。通过 message 事件定义了当接收到服务器端的消息时,更新浏览器端的显示。浏览器端通过一个 HTML 5 提供的canvas 来绘制内存占用率的曲线图,如 图 1 所示。


图 1. 内存占用率的曲线图
内存占用率的曲线图

总结

一提到服务器端开发,开发人员一般想到的就是 Java 和 C/C++ 等语言。但是通过 node.js 提供的强大能力,熟悉 JavaScript 的 Web 开发人员也可以开发出服务器端的应用。本文详细介绍了 node.js 的事件驱动机制和模块化结构,并对其中的常用模块做了详细说明,最后通过一个完整的实例展示了 node.js 的实用性。


下载

描述 名字 大小 下载方法
本文中用到的 node.js 上开发的 JavaScript 代码 sample.zip 4KB HTTP

关于下载方法的信息


参考资料

学习

  • 查看 node.js 的官方说明文档。

  • “The WebSocket API ”给出了 WebSocket 规范。

  • 查看 Socket.IO 的说明文档。

  • developerWorks Web development 专区 :通过专门关于 Web 技术的文章和教程,扩展您在网站开发方面的技能。

  • developerWorks Ajax 资源中心 :这是有关 Ajax 编程模型信息的一站式中心,包括很多文档、教程、论坛、blog、wiki 和新闻。任何 Ajax 的新信息都能在这里找到。

  • developerWorks Web 2.0 资源中心 ,这是有关 Web 2.0 相关信息的一站式中心,包括大量 Web 2.0 技术文章、教程、下载和相关技术资源。您还可以通过 Web2.0 新手入门 栏目,迅速了解 Web 2.0 的相关概念。

  • 查看 HTML5 专题 ,了解更多和 HTML5 相关的知识和动向。

获得产品和技术

  • 下载 node.js 。

  • 下载 Cygwin 。

讨论

  • 查看 developerWorks 博客 的最新信息。

  • 加入 developerWorks 中文社区 。查看开发人员推动的博客、论坛、组和维基,并与其他 developerWorks 用户交流。

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 《Node.js 极简教程》 东海陈光剑

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。https://nodejs.org快速开始 Hello World Node 是什么 简史 是什么 Node.js是一个Javascript运行环境(runtime environment),发布于2009年5月,…...

    2024/4/15 3:59:17
  2. Nodejs教程26:Node.js项目之一:创建目录,环境配置,连接数据库

    阅读更多系列文章请访问我的GitHub博客,示例代码请访问这里。 Node.js项目介绍 利用学到的知识,实现一个简单但实用的小项目如下:这是一个商品列表,具有展示商品信息,添加商品,删除商品的功能。 项目的文件夹结构 ├── package.json ├── server.js # 服务器代码 ├─…...

    2024/4/20 4:52:44
  3. linux下安装node.js,npm,mongoDB开发环境,项目部署实例,远程访问实例

    技术栈:Node+Html+MongoDB,实现可远程访问的Web站点,后期扩展为api服务,实现前后端分离1.工具安装xshell,xftp,请先安装并学会如何使用。MongoDB的安装请查看本博客的安装教程文章。2.node.js安装https://nodejs.org/zh-cn/download/current/官网下载node.js最新版本,并使…...

    2024/4/15 3:59:15
  4. Node.js的开源博客系统Ghost搭建教程

    准备工作 Node.js版本:0.10.x、0.12.x、4.2.x。安装步骤可参考:Node.js环境搭建 Ghost版本:0.7.4:中文集成版(33.6M),中文标准版(3.39M),英文原版(3.23.M) 推荐使用中文集成版,其中包含Node.js需要的模块包node_modules。 若使用中文标准版,需使用npm install --produc…...

    2024/4/20 1:10:47
  5. 使用 HTTP/2 加速 Node.js 应用

    导读我们想让现今使用 Node.js 构建的网站能够更加轻松的获得性能提升。为此,我们开发了 netjet 中间件,它可以解析应用生成的 HTML 并自动添加 Link 头部。 当在一个示例的 Express 应用中使用这个中间件时,我们可以看到应用程序的输出多了如下 HTTP 头: 本文是使用 Ghost…...

    2024/5/6 21:07:50
  6. Node.js + Vue.js 全栈开发王者荣耀手机端官网和管理后台

    前言 最近在跟着Johnny的全栈之巅系列视频教程学习使用NodeJS+Express+Element-UI+MongoDB等开发王者荣耀,服务端server,移动端web,admin,学到了不少东西。总体来说,他讲的视频思路蛮清晰的,跟着做基本上都能快速上手。 Element-UI,网站快速成型工具,一套为开发者、设计…...

    2024/4/24 13:23:57
  7. node.js + hexo搭建个人博客网页

    hexo搭建个人博客网页 1 hexo是什么? hexo是一个快速,简洁且高效的博客框架, 也可以理解为是基于node.js制作的一个博客工具2 安装插件 (1)node.js插件首先清楚node并不是一个web服务器。node.js只是计算机上执行代码的一种方式,简单来说node.js是 运行在服务端的JavaScr…...

    2024/4/24 13:23:57
  8. Node.js 简介

    简介: Node是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念。它的目标是帮助程序员构建高度可伸缩的应用程序,编写能够处理数万条同时连接到一个(只有一个)物理机的连接代码。 如果您听说过 Node,或者阅读过一些文章,宣称 Node 是多么多么的棒,那么…...

    2024/4/24 13:23:59
  9. Nodejs教程27:Node.js项目之二:实现路由

    阅读更多系列文章请访问我的GitHub博客,示例代码请访问这里。 创建路由 在之前的例子中,我们总是要通过if else语句来判断请求的接口路径,并进行相应操作。 这样会极大地降低开发效率,也不利于后期代码维护。 因此,通常的开发中,都会使用路由对不同的接口进行操作。 现在…...

    2024/4/24 13:23:54
  10. Node.js建站之安装express(一)

    最近用Node写了个简单的多人博客系统,想着总结一下经验。 github地址:https://github.com/Destinygu/node-blog demo地址:http://123.207.248.56:3000/功能 - 查看个人信息 - 支持简单markdown语法编辑 - 可以管理自己的博客及登录后查看他人博客 - 博客页面对移动端适…...

    2024/4/24 13:23:53
  11. Node.js开发札记之一·入门篇

    前言:Node.js这个名字并不陌生。刚开始时,以为又是某个团体搞的JS类库。作为jQuery忠实追随者,当时还是比较关注这个异端的出现。后来发现,其实是服务器端的JS。用了J2EE那么多年了,没有心思再去搞这一套。还不如深入写下J2EE的架构什么的。而技术的革新的风暴还是席卷了整…...

    2024/4/24 13:23:52
  12. Node.js 开发基于 JavaScript 的 RESTful 应用

    使用 Node.js 开发基于 JavaScript 的 RESTful 应用Node.js 是服务器端的 JavaScript 运行环境,它的设计初衷是以一种简单的方式创建可伸缩性的网络程序。Node.js 具有异步 I/O 和事件驱动等特性,充分利用了 JavaScript 的闭包特性和事件处理机制,实现了类似 Apache 的 HTTP…...

    2024/4/24 13:23:55
  13. Node.js 回调函数

    回调:指的是将一个函数作为参数传递给另外一个函数,并且通常在第一个函数执行完成以后被调用。把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件…...

    2024/4/24 13:23:51
  14. 从头调通一个node.js博客网站

    特别说明的是,此博客网站是从:https://codeload.github.com/happen-zhang/node.js-blog-starter/zip/master下载的。 首先做准备工作: 1. 安装node.js建议从官网下载(https://nodejs.org/en/),我选择mature and dependable版本(你也可以自己选择),安装成功后,验证是否…...

    2024/4/25 23:22:35
  15. 转载:Node.js入门系列——《深入浅出Node.js》

    作者:田永强 日期:2011-12-02完整版 前言:Node.js从2009年诞生至今,已经发展了两年有余,其成长的速度有目共睹。从在github的访问量超过Rails,到去年底Node.jsS创始人Ryan Dalh加盟Joyent获得企业资助,再到今年发布Windows移植版本,Node.js的前景获得了技术社区的肯定。…...

    2024/4/24 13:23:50
  16. Nodejs教程01:Nodejs简介

    阅读更多系列文章请访问我的GitHub博客,示例代码请访问这里。 Nodejs简介简单的说 Node.js 就是运行在服务端的 JavaScript。 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。Nodejs的应用场景…...

    2024/5/5 6:13:52
  17. nuxt.js——搭建nuxt项目(可详细了!)

    前言: nuxt.js是基于vue的一套可实现SSR服务端渲染的前端框架,所以要使用nuxt.js,前提是需要会vue,因为nuxt.js开发规则和vue相同,只是在vue的基础上扩展了一些功能。 本文目录:安装node环境和vue-cli 基于vue安装nuxt 本地运行nuxt正文:安装node环境和vue-cli: node.j…...

    2024/5/5 5:04:36
  18. Node.js利用Express框架搭建小型网站(下)

    1.ejs模块在我下载的express版本里,默认使用的是jade模板,jade的风格虽然简洁,但是我很不习惯,毕竟熟悉了传统的html风格,所以在这我比较推荐ejs风格,它和html风格基本一致,方便上手。最好在node.exe的目录下执行nmp install ejs,这样可以将ejs模块放到默认的项目模块n…...

    2024/4/18 16:23:18
  19. Node.js 博客实例(补充一)使用KindEditor

    原教程 https://github.com/nswbmw/N-blog/wiki/_pages 前面我们搭建的博客使用了 Markdown 来写文章,假如普通用户使用的话不懂什么是 Markdown ,加之 Markdown 的表现力还并不是很丰富。这个时候,我们就需要一款强大的编辑器了,我们不妨试试 KindEditor。什么是 KindEdit…...

    2024/5/5 4:13:57
  20. 如何使用Node.js构建简单的博客

    在本教程中,我将向您展示如何使用Node.js和Cosmic JS创建一个简单的博客。 这将是您创建过的最快,最轻量的博客。 让我们开始吧。 TL; DR 观看演示 在Cosmic JS上安装Simple Blog App 在GitHub上查看代码库 入门 确保在计算机上安装了Node.js和NPM,如果没有, 请访问N…...

    2024/5/6 3:55:07

最新文章

  1. 全新桥隧坡安全监测解决方案,24h监测效率提升30%

    4月26日&#xff0c;交通运输部党组书记、部长李小鹏在部务会上强调&#xff0c;要高度重视公路桥梁隧道结构监测工作&#xff0c;抓紧推进公路桥梁隧道结构监测系统建设&#xff0c;进一步健全完善公路桥梁隧道结构监测长效运行机制。 中海达积极参与公路桥梁隧道结构监测工作…...

    2024/5/6 23:56:46
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/6 9:38:23
  3. 深入浅出 -- 系统架构之微服务中Nacos的部署

    前面我们提到过&#xff0c;在微服务架构中&#xff0c;Nacos注册中心属于核心组件&#xff0c;通常我们会采用高性能独立服务器进行部署&#xff0c;下面我们一起来看看Nacos部署过程&#xff1a; 1、环境准备 因为Nacos是支持windows和Linux系统的&#xff0c;且服务器操作…...

    2024/5/5 1:21:32
  4. 图像处理相关知识 —— 椒盐噪声

    椒盐噪声是一种常见的图像噪声类型&#xff0c;它会在图像中随机地添加黑色&#xff08;椒&#xff09;和白色&#xff08;盐&#xff09;的像素点&#xff0c;使图像的质量降低。这种噪声模拟了在图像传感器中可能遇到的问题&#xff0c;例如损坏的像素或传输过程中的干扰。 椒…...

    2024/5/5 8:37:08
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/4 23:54:56
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/4 23:54:56
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/6 9:21:00
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/4 23:55:16
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/4 23:55:17
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/4 23:55:06
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/4 23:55:06
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/4 23:55:16
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/6 21:42:42
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57