node中模块系统及核心模块、执行node文件

node中模块系统:

1.模块系统:核心模块、第三方模块、 自己写的模块。

2.网页中所有的路径都是URL,而不是文件路径。

3.node偏底层开发,开启的服务器完全是一个黑盒子,所有的资源默认都是不能被用户访问的,必须自己编写代码设计开放资源。

4.在node中实现服务器重定向:header(‘location’,‘地址’) , 301----永久重定向 302----临时重定向

5.模块系统:模块作用域 使用require()加载模块 使用exports接口对象导出模块中的成员。

在一个模块中是无法使用另一个模块中的成员的,如果真的需要使用,必须使用exports导出才可以在另一个模块中使用,如:

导出add方法:function add(x,y){

return x + y;

}

exports.ad = add;

6.导出多个成员和导出一个成员:

对于希望被其他模块访问到的成员,必须挂载到exports接口对象中导出,如:exports.a = ‘123’;

exports.b = 3333;

exports.c = function(){};

exports.b = {};

7.默认导出的是一个对象,如果需要导出一个成员那么就要重新赋值:module.exports = ‘新的值’,

module.exports 使用多次也是无效的,因为后面的会覆盖前面的,当然可以使用对象的方式导出多个成员,如:

module.expirts = {

add:function(){},

a:‘123’,

b:123,

c:{},

d:[]

};

8.require()优先从缓存加载,require()每次在加载的时候先在缓存中找是否加载过,如果加载过直接拿来用,否则在加载,体现模块系统的高效。

9.require(’./test.js’)加载自己写的模块时,括号里面是路径,必须以./或者…/开始,不能省略,加载核心模块时括号里面不是路径,直接写模块名就可以。

加载第三方模块时,括号里面写安装的包名,第三方模块实际加载的是:当前文件所在目录中的node_modules目录 --> art-template --> package.json文件中main属性所指向的index.js文件。

在命令窗口执行node.js文件:

在命令行执行node.js代码只需键入:node +文件名(node.js文件不能以node.js命名,文件的后缀名可以省略) 即可,打开命令行的三种方式:

1.window + r -> cmd回车

2.在当前文件目录鼠标右键通过Git打开

3.shift + 鼠标右键 ->在此处打开Powershell窗口,下面将初步介绍几种基本语法和常用模块:

核心模块:

node为js提供很多服务器级别的API,这些API绝大多数被包装到一个具名的核心模块中,例如文件操作的fs模块,http服务构建的http模块,path路劲操作模块;加载模块使用:require(‘模块名’),通过此方法也可以相互加载nodejs文件,更多模块了解可阅读:https://nodejs.org官方文档;如下模块:

	// 在命令窗口打开文件执行以下代码:// 1.执行简单代码并测试window和document在node中是否存在:var str = 'hello';console.log(str); //helloconsole.log(window); //ReferenceError: window is not defined at Object.console.log(document); //ReferenceError: document is not defined at Object.// 2.载入内置fs文件模块:const fs = require('fs');fs.readFile('../测试.txt', function(errors, datas) { //readFile读取文件,里面可以传入两参数,第一个为文件路径;第二个为回调函数(回调函数中第一个参数为读取失败时的错误对象,读取成功时为null;第二个参数为读取成功时的数据,读取失败时为undefined)if (errors) {console.log('文件读取失败!');return false;} else {console.log('读取文件内容为:' + datas); //有的时候可能会返回二进制数据经计算机转为十六进制数据,此时可以使用.toString()将其转为我们可以认识的字符};});fs.writeFile('./<>.txt', '苦海1', function(error) { //writeFile写入文件,里面可传入三个参数,一为文件路径;二为写入文件的字符;三为回调函数(回调函数中只有一个参数,写入成功时为null,写入失败时为错误对象),注意:如果没有路径指向的文件,则会自动创建文件并写入内容,除非文件命名失败才会写入失败。if (error != null) console.log('文件写入失败!');});fs.readdir('./lib', function(error, data) { //文件路径:用于访问指定路径下的文件,第一个参数表示要访问到额路径;第二个参数是回调函数(回调函数中第一参数表示访问失败时的错误对象,第二个参数表示访问成功时的成功对象)console.log(error); //当访问成功时,error对象是null;访问失败时此对象是错误对象console.log(data); //当访问成功时,以数组的形式返回当前目录下的文件结构;访问失败时返回undefined});// 3. 载入内置http模块:所有联网的程序都要进行网络通信,计算机中只有一个物理网卡,而且同一个局域网中,网卡的地址必须是唯一的,网卡通过唯一的IP地址来定位; IP定位到具体的电脑,端口号定位到具体的应用程序,所有联网的软件都会占用一个端口号。const http = require('http');const server = http.createServer(); //使用createServer创建一个web服务器server.on('request', function(request, response) { //给server注册请求事件request,回调函数中可以传入两个参数,第一个为请求对象,第二个额为响应对象;它们中有几个比较重要的属性,如下:response.write('<h1>Hellow,this is .write()API</h1>'); //响应给浏览器的内容,此方法需要配合response.end()方法才可以实现效果;当然实际推荐只使用end方法也是可以实现相同的效果的,前提是将响应内容传入end括号中:response.end('<h1>Hellow,this is .write()API in end</h1>'); //将响应内容直接传入end中可以省略writer方法response.setHeader('Content-Type', 'text/plain;charset=utf-8'); //浏览器默认编码与相应的编码不一致时会乱码,这里.setHeader()设置响应头中Content-Type,不同的资源对应的 Content-Type 是不一样的,可以到这里查询:http://tool.oschina.net/commonsrequest.socket.remoteAddress; //.socket.remoteAddress获取用户IP地址request.socket.remotePort; //.socket.remotePort获取用户端口号response.statusCode = 302;//设置响应状态码,302为临时重定向response.setHeader('Location', '/');//页面重定向request.url; //返回浏览器输入url中端口号后面的值,可以利用它做路径逻辑响应,如:var requestUrl = request.url;if (requestUrl === '/' || requestUrl === '/index.html') {response.end('index.html');} else if (requestUrl === '/login') {response.end('login.html');} else {response.end('<h5>404 NOT FOUND!</h5>');};});server.listen(4000, function() { //绑定端口号,启动服务,在浏览器使用localhost:4000就可以访问到此服务响应console.log('http服务器启动成功了');});// 4.url模块:var url = require('url'); //载入url模块var result = url.parse('127.0.0.1:3000/test.html?name=jack&age=18', true); //以对象的方式解析URL地址,后面的参数默认为false,当为true时,?后面的内容将以对象的方式呈现,如下案例:console.log(result);/*Url {protocol: '127.0.0.1:',slashes: null,auth: null,host: '3000',port: null,hostname: '3000',hash: null,search: '?name=jack&age=18',query: [Object: null prototype] { name: 'jack', age: '18' },pathname: '/test.html',path: '/test.html?name=jack&age=18',href: '127.0.0.1:3000/test.html?name=jack&age=18'}*/console.log(result.query); //直接获取?后面的参数 { name: 'joke', message: 'hellow' }

实现Apache功能:

	 //简单实现Apache功能// 1.加载http和fs模块:var http = require('http');var fs = require('fs');// 2.创建一个浏览器服务:var server = http.createServer();// 定义个路径的变量:var urldir = '/www'// 3.绑定请求事件:server.on('request',function(request,response){// 获取请求的路径:var url = request.url;// 判断请求的路径并做出响应if (url==='/') {fs.readFile(urldir + '/index.html',function(error,data){if (error) {return response.end('404 Not Found');}; response.end(data);});} else if (url==='/index.html') {fs.readFile(urldir + '/index.html',function(error,data){if (error) {return response.end('404 Not Found');}; response.end(data);});} else if (url==='/test.txt') {fs.readFile(urldir + '/test.txt',function(error,data){if (error) {return response.end('404 Not Found');}; response.end(data);});} else if (url==='/login.html') {fs.readFile(urldir + '/login.html',function(error,data){if (error) {return response.end('404 Not Found');}; response.end(data);}); };});// 4.监听端口号:server.listen(3000,function(){console.log('running...');});像Apache一样找文件:var http = require('http');var fs = require('fs');var urldir = 'www/';var server = http.createServer();server.on('request', function(request, response) {var url = request.url;var indurl = '/index.html'if (url !== '/') {indurl = url;};fs.readFile(urldir + indurl, function(error, data) {if (error) {return response.end('404 Not Found!');};response.end(data);});});server.listen(3000, function() {console.log('running...');});

提示:本文图片等素材来源于网络,若有侵权,请发邮件至邮箱:810665436@qq.com联系笔者删除。
笔者:苦海

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575314.shtml

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

相关文章

Repository 仓储,你的归宿究竟在哪?(一)-仓储的概念

写在前面 写这篇博文的灵感来自《如何开始DDD(完)》&#xff0c;很感谢young.han兄这几天的坚持&#xff0c;陆陆续续写了几篇有关于领域驱动设计的博文&#xff0c;让园中再次刮了一阵“DDD探讨风”&#xff0c;我现在不像前段时间那样“疯狂”了&#xff0c;写博文需要灵感&a…

node中模板引擎、模块导出、package.json简介

在node.js中使用引擎模板&#xff1a; art-template不仅在浏览器可以使用&#xff0c;也可以在node中使用&#xff0c;并且模板引擎起早诞生于服务器领域&#xff0c;在node中使用模板引擎&#xff1a; 1.安装&#xff1a;在一个文件目录下执行命令&#xff1a;npm install a…

富爸爸穷爸爸

推荐大家看看&#xff0c;虽然我只看了第一章&#xff0c;但是我觉得写的确实挺好的&#xff0c;也确实符合这个社会规律。 老实本分的工作已经是过去式了。为自己工作才是出路。转载于:https://www.cnblogs.com/joysky/p/3909127.html

Java和C++在细节上的差异(转)

Java的基本程序结构、关键字、操作符都和C/C非常相似&#xff0c;以下为主要的几点区别: 一、基本程序设计结构&#xff1a; Java的基本程序结构、关键字、操作符都和C/C非常相似&#xff0c;以下为主要的几点区别&#xff1a; 1. Java的原始数值型数据类型中不包含无符号类型&…

文件路径和模块路径、nodemon工具

文件路径和模块路径&#xff1a; //在文件操作相对路径中&#xff0c;前面的 ./ 可以省略&#xff0c;但是 在模块标识路径中 &#xff0c;前面的 ./ 不能省略。// ./-----表示相对于当前目录 /-------当前文件所属磁盘根目录 var fs require(fs);fs.readFile(t…

Express框架简介、express使用模块引擎、模式数据

Express简介&#xff1a; 原生的http不足以应对我们的开发需求&#xff0c;所以我们需要使用框架来加快我们的开发&#xff0c;这里推荐expressjs&#xff0c;其官网&#xff1a;expressjs.com&#xff0c;中文文档推荐&#xff1a;http://javascript.ruanyifeng.com/nodejs/e…

数据库字段关联更新

MS SQL Server 子查询更新&#xff1a; update log set uin b.uin from log a,logs b where a.accountuin b.accountuin mysql 更新&#xff1a; update t_stat_month_user a INNER JOIN t_dept b on a.op_deptb.op_id set a.dept_short_nameb.dept_short_name;转载于:https:/…

浏览器基础知识

Web浏览器的主要功能是展示网页资源&#xff0c;即请求服务器并将结果展示在窗口中。工作原理大概如下&#xff1a; 地址栏输入URL 浏览器根据输入的URL查找域名的IP地址&#xff0c;DNS查找过程如下&#xff1a; 浏览器缓存——浏览器会缓存DNS记录一段时间&#xff0c;不同浏…

MongoDB简介、在node中使用MongoDB

MongoDB数据库简介&#xff1a; 使用MongoDB的好处是不用SQL语句&#xff0c;它提供了对应的API&#xff0c;其功能和MYSQL基本相同&#xff0c;是最像关系型数据库的非关系型数据库&#xff1b;不需要设计表的结构&#xff0c;文档相当于json&#xff0c;如果想要了解更多&am…

喜用神最正确的算法_各种电磁仿真算法的优缺点和适用范围(FDTD, FEM和MOM等)...

从实际工程应用的角度谈一下我对这几种算法的理解。先说结论&#xff0c;FDTD算的快但是不精确&#xff0c;可以用来算电大尺寸的物体&#xff0c;要是一个物体的尺寸大于10个波长&#xff0c;一般的服务站是跑不动FEM的&#xff0c;那必须得用FDTD了。FEM最经典的电磁仿真软件…

Linux下实现自动设置SSH代理

SSH的巨大价值体现在能够配置为代理服务器上。不像在Windows下每次还需要手动登录设置&#xff0c;Linux有很好的工具链能够实现自动设置SSH代理&#xff0c;就是expect和ssh的联合使用&#xff0c;再加上proxychains&#xff0c;任何程序都可以享用代理了&#xff0c;在此我简…

node中操作MySQL

node操作MySQL数据库&#xff1a; 在node中操作MySQL数据库的基本流程如下&#xff1a; // node操作MySQL需要在npm官网下载mysql包并载入node执行代码&#xff1a;// 1.载入MySQL数据库包var mysql require(mysql);// 2.创建连接&#xff1a;var connection mysql.createCo…

百度UEditor编辑器使用(二)

本文摘自&#xff1a;http://www.cnblogs.com/pmpen/archive/2011/09/19/2181811.html 首先感谢分享 百度WEB前端设计部推出一款开源的编辑器UEditor http://ueditor.baidu.com/index.html &#xff0c;这款编辑器相当强大&#xff0c;它提供了百度地图&#xff0c;google地图…

护士资格证延续注册WEB服务调用失败_服务熔断

熔断机制是应对服务雪崩效应的一种微服务链路保护机制&#xff0c;当扇出链路的某个微服务不可用或者响应时间太长时&#xff0c;会进行服务的降级&#xff0c;进而熔断该节点微服务的调用&#xff0c;快速返回”错误”的响应信息。当检测到该节点微服务响应正常后恢复调用链路…

AssetManager asset的使用

Android 系统为每一个新设计的程序提供了/assets文件夹&#xff0c;这个文件夹保存的文件能够打包在程序里。/res 和/assets的不同点是&#xff0c;android不为/assets下的文件生成ID。假设使用/assets下的文件&#xff0c;须要指定文件的路径和文件名称。以下这个样例&#xf…

vmware 快照用关机吗_PS板绘上色的骚操作,打破初学者上色残的瓶颈!|快照|绘画|初学者|配色|色阶...

PS板绘上色的骚操作&#xff0c;打破初学者上色残的瓶颈&#xff01;初学者如何入门绘画&#xff1f;学习板画难吗&#xff1f;怎样才能学习好绘画&#xff1f;想必这些都是绘画初学者们经常在想的问题吧&#xff0c;就是不知道如何才能学习好绘画&#xff0c;然后绘画出自己想…

vue概述、vue文件特点、vue核心思想、双向数据流、单文件、启动一个vue项目、声明式渲染

vue介绍&#xff1a; Vue&#xff1a;当前较火的MVVM框架&#xff0c;轻量、简介、高效、组件化、数据驱动&#xff0c;模块和渲染函数的弹性选择&#xff0c;简单的语法及项目创建&#xff0c;渲染速度极快&#xff0c;基于Virtual Dom&#xff0c;利用虚拟DOM实现快速渲染&a…

jQuery特效手风琴特效 手写手风琴网页特效

今天写一个简单的手风琴效果&#xff0c;不用插件&#xff0c;利用强大的jQuery&#xff0c;写一个手风琴效果。 页面预览&#xff0c;请点击这里预览&#xff1a; 手风琴预览案例分析&#xff1a; html结构 就是一个大盒子里面放着5个li&#xff0c;每个li的小小是200像素&a…

db2 删除索引_MYSQL进阶——索引

索引模型hash索引hash索引主要适用于等值查询的场景&#xff0c;排序&#xff0c;模糊搜索等场景并不适用有序数组有序数组可用于非等值查询&#xff0c;排序等场景&#xff0c;但是由于写数据时需要对数组中的元素进行位移&#xff0c;所以一般用于静态数据的场景二叉树二叉树…

javascript中es6语法

es6语法简介&#xff1a; // 1.历史&#xff1a;// 1995-----JavaScript诞生// 1997-----ECMAScript标准确立// 1999-----ES3出现&#xff0c;与此同时IE5风靡一时// 2009-----ES5出现&#xff0c;现在绝大所数使用的是ES5// 2015-----ES6/ECMAScript2015出现// 2.函数的Rest参…