手机版

Node.js和Express简介

时间:2021-09-05 来源:互联网 编辑:宝哥软件园 浏览:

刚刚开始学习如何用Node.js和Express构建一个web服务器,没有解释太多概念性的东西。

一、Nodejs介绍

==Node是JavaScript语言的服务器运行环境。==

所谓“运行环境”有两层含义:一是JavaScript语言通过Node在服务器上运行,从这个意义上说,Node有点像JavaScript虚拟机;其次,Node提供了大量的工具库,使得JavaScript与操作系统进行交互(比如读写文件,创建新的子流程)。从这个意义上说,Node也是JavaScript的工具库。

谷歌的V8引擎在Node中被用作JavaScript解释器。通过自行开发的libuv库调用操作系统资源。

其次,下载并安装Node.js

2.1 Node.js下载

从官网下载node . js://www . JB 51 . net/softs/504128 . html

官网会根据你目前的操作系统提供最适合你下载的版本。

2.2安装

下载成功后,是一个msi文件。双击安装它。安装成功后,相应的环境变量会自动配置,所以我们不需要手动配置。

接下来可以一路成功安装。

2.3测试Node.js是否安装成功

安装成功后,可以在窗口控制台检查安装是否成功。

输入以下命令查看节点的版本。

Node -v直接进入Node然后返回,这样node就可以执行我们的js代码了。

节点

2.4使用Node.js运行JavaScript代码

创建新的nodeproject目录和新的js文件。01_hello.js

var num1=10var num2=20console . log(num 1 num 2);在windows控制台中,将目录更改为js文件所在的目录。然后进入

节点01_hello.js

第三,澄清Node.js中的一些基本概念

3.1 Node.js不是一个js应用,而是一个JS运行平台

看到Node.js这个名字,初学者可能会误认为是一个Javascript应用程序。事实上,Node.js是用C语言编写的,是一个Javascript运行环境。

既然不是Javascript应用,为什么要调用。js?因为Node.js是一个运行Javascript的环境。说到Javascript,首先想到的是日常浏览器。现代浏览器包含各种组件,包括渲染引擎、Javascript引擎等。Javascript引擎负责解释和执行网页中的JavaScript代码。作为Web前端最重要的语言之一,Javascript一直是前端工程师的专利。但是Node.js是一个后端的Javascript运行环境(支持的系统包括Linux和Windows),这意味着可以编写系统级或者服务器端的Javascript代码,提交给Node.js进行解释和执行。

node.js和JavaScript的关系

JavaScript包括三个部分:ECMAScript-262、BOM和DOM。BOM与浏览器相关,DOM与HTML页面相关。Node.js中只包含ECMAScript-262.因此,我们之前对BOM和DOM的一些操作都是基于浏览器的,不能在Node.js中使用

3.3 node . js中的几个全局变量

全局:表示Node的全局环境,类似于浏览器的窗口对象。需要注意的是,如果在浏览器中声明了一个全局变量,那么实际上就是声明了一个全局对象的属性。例如,var x=1相当于设置window.x=1,但Node不是,至少不在模块中(REPL环境的行为与浏览器一致)。在模块文件中,声明var x=1,这个变量不是全局对象的属性,global.x等于undefined。这是因为模块的全局变量是该模块的私有变量,不能被其他模块访问。流程:该对象表示Node所在的当前流程,允许开发人员与该流程进行交互。控制台:指Node内置的控制台模块,在命令行环境下提供标准输入和标准输出功能。3.4 node . js中的几个全局函数

SetTimeout():用于在指定的毫秒数后运行回调函数。实际通话间隔也取决于系统因素。毫秒间隔介于1毫秒和2,147,483,647毫秒之间(约24.8天)。如果超出此范围,将自动更改为1毫秒。此方法返回一个整数,表示此新计时器的数量。ClearTimeout():用于终止setTimeout方法创建的新计时器。SetInterval():用于每隔一定毫秒调用一次回调函数。由于系统因素,可能无法保证每次调用之间会有指定的毫秒数,但只会超过这个间隔,而不会小于它。指定的毫秒数必须是1到2,147,483,647之间的整数(大约24.8天)。如果超出此范围,将自动更改为1毫秒。此方法返回一个整数,表示此新计时器的数量。ClearInterval():终止由setInterval方法创建的新计时器。Require():用于加载模块。Buffer():用于操作二进制数据。3.5 node . js的核心模块

如果只是在服务器上运行JavaScript代码,并不是很有用,因为服务器上有很多脚本语言。Node.js的用途在于它* *本身* *还提供了一系列与操作系统交互的功能模块。这些核心功能模块无需安装即可使用。这是他们的名单。

http:提供HTTP服务器功能。网址:解析网址。Fs:与文件系统交互。Querystring:用于解析URL的查询字符串。Child_process:创建一个新的子进程。Util:提供了一系列实用的小工具。路径:处理文件路径。Crypto:它提供加密和解密功能,基本上是OpenSSL的包装器。第三,构建一个web应用程序

使用Node.js构建web服务器通常会使用一些框架来帮助它。

Express是一个开源的node.js项目框架。初学者可以使用express快速构建一个Web项目。express集成了创建http服务器、管理请求和文件以及处理Session的功能,所以express非常适合初学者。

3.1安装Express框架

使用node.js附带的包管理器npm进行安装。

创建项目目录,Node_Hello。进入目录,创建一个package.json文件,内容如下:

{ 'name': 'Node_Hello ',' description ' : ' nodejs Hello world app ',' version': '0.0.1 ',' private': true,Dependencies ' : { ' Express ' : ' 4 . x ' } }上面的代码定义了名称、描述、版本等。并指定需要4.0以上的Express版本。

==从控制台中,首先输入上一个项目目录==,然后输入以下命令,然后下载Express。

国家预防机制安装

下载完成

3.2创建启动文件

在上面的项目目录下,创建一个新的启动文件,名称为==index.js==。编写以下代码:

var express=require(' express ');var app=express();App.get ('/',function (req,res) {res.send ('h1 hello,这是我们的第一个nodejs项目/h1 ');});app . listen(8080);3.3运行索引. js文件

节点索引. js

3.4通过浏览器访问

在浏览器中输入以下地址访问我们刚刚建立的网站。

http://127.0.0.1:8080

第四,使用Webstorm构建Node.js web应用程序

用webstorm构建Node.js应用程序更方便。

4.1下载并安装网络风暴

下载web storm://www . JB 51 . net/softs/507325 . html。

下载后直接安装。

4.2创建节点快速应用程序

4.3项目目录结构

App.js:启动文件或门户文件

Package.json:它存储项目和模块依赖关系的信息。在依赖项中添加依赖模块时,将运行npm安装。npm将检查当前目录中的package.json,并自动安装所有指定的模块

Node_modules:存储package.json中安装的模块,当你在package.json中添加依赖模块并安装时,将它们存储在这个文件夹中。

公共:存储图像、css、js和其他文件

路由:存储路由文件

视图:存储视图文件或模板文件

Bin:存储可执行文件

4.4每个主要文件的描述

4.4.1 app.js

//加载模块var express=require(' express ');var path=require(' path ');var fav icon=require(' serve-fav icon ');var logger=require(' mor gan ');var cookieParser=require(' cookie-parser ');var body parser=require(' body-parser ');//加载路由文件var index=require(' ./routes/index’);var users=require(' ./路由/用户');//生产一个表达的实例var app=express();//查看引擎设置/设置视图文件夹为存放视图文件的目录,即存放模板文件的地方,__dirname为全局变量,存储当前正在执行的脚本所在的目录*/app . set(' view ',path.join(__dirname,' view ');//设置模板引擎为ejsapp.set('视图引擎,' ejs ');//将您的收藏夹图标放入/public//app.use后取消注释(fav图标(路径。join(_ dirname,' public ',' fav '图标。ico’)));//加载日志中间件app.use(记录器(' dev ');//加载解析json的中间件app。使用(BodyParser。JSON());//加载解析urlencoded请求体的中间件邮政。请求app。使用(BodyParser。URL编码({扩展: false });//加载解析甜饼干的中间件app。使用(CookieParser());//设置公众的文件夹为放置静态文件的目录app。使用(快递。静态(路径。join(_ _ dirname,' public '));//路由控制器。app.use('/',index);//http://localhost :3000 app。use('/users ',users);//http://localhost :3000/users//catch 404并转发给错误handlerapp.use(函数(请求,结果,下一个){ var err=新错误('未找到');错误.状态=404下一步(错误);});//错误handlerapp.use(函数(err,req,res,next) { //设置局部变量,仅在开发res.locals.message=err.message中提供错误;本地人。错误=请求。app。get(' env ')===' development '?err : { };//呈现错误页面资源状态(错误。状态| | 500);res.render('错误');});//把应用导出。别的地方就可以通过需要(“应用程序”)获取到这个对象module.exports=app4.4.2 bin/www

#!/usr/bin/env node //表明是结节可执行文件/** *模块依赖关系。*///引入我们在app.js中导出的应用模块var app=require('./app ');//引入调试程序模块,打印调试日志var debug=require(' debug ')(' hello : server ');//引入超文本传送协议(超文本传输协议的缩写)模块var http=require(' http ');/** *从环境中获取端口并存储在表达中*/var port=normalizePort(进程。环境。端口| | ' 3000 ');app.set('端口,港口);//设置端口号/** *创建超文本传送协议服务器。*///创建超文本传送协议(超文本传输协议的缩写)服务器var服务器=http。CreateServer(应用程序);/** *在所有网络接口上侦听提供的端口。*///监听指定的端口server.listen(端口);//监听错误事件一个错误。是发生错误的时候的回调函数服务器. on('错误,OnError);//监听倾听事件服务器. on('侦听,OnListening);/** *将端口规范化为数字、字符串或假的.*/function normalizePort(val){ var port=parsent(val,10);if (isNaN(端口)){ //命名管道返回val} if(端口=0) { //端口号返回端口;}返回false}/* * * HTTP服务器"错误"事件的事件侦听器。*/函数onError(错误){ if (error.syscall!=='听')(抛出错误;} var bind=端口类型==='字符串'?管道端口:"端口"端口;//用友好的消息开关处理特定的侦听错误(错误。代码){ case ' EACCES ' :控制台。错误(绑定)需要提升的权限');过程。出口(1);打破;案例“EADRINUSE”:控制台。错误(绑定)已在使用中");过程。出口(1);打破;默认值:抛出错误;} }/* * * HTTP服务器"侦听"事件的事件侦听器*/function onListening(){ var addr=server。address();var bind=addr===' string '的类型?管道" addr : "端口" addr.port调试("侦听"绑定);}4.4.3路由/index.js

var express=require(' express ');var路由器=express。路由器();/* gethomepage。*/router.get ('/',function (req,RES,next) {res.render ('index ',{title : '教育知识和创造' });});module.exports=路由器;/*生成一个路由实例来捕获访问主页的GET请求,导出这个路由并在app.js中传递app.use('/',routes);加载。这样,在访问主页时,将调用res.render('index ',{ title : ' education and creation ' })。呈现view/index . ejs模板并在浏览器中显示它。*/4.4.4路由写入的优化

在前面的==app.js中,为每个模板添加一次路由是很麻烦的。事实上,应该通过index.js来完成,也就是说,多个路由可以放在一个路由文件中。

//加载路由文件var index=require('。/routes/index’);//移除varusers=require('。/路由/用户’);//移除//路由控制器。app.use('/',index);//http://localhost :3000//remove app . use('/users ',users);//http://localhost :3000/users//可以更改为:

var routes=require('。/routes/index’);路线(app);==index.js==文件优化如下:管理起来方便多了。

模块。exports=function(app){//get请求的路由是http://localhost33603000app。get ('/',function (req,RES) {res.render ('index ',{title : '教育和创建ABC ' })});//另一个请求路由:http://localhost :3000/abcpap . get('/ABC ',function (req,RES) {res.render ('index ',{title : '于之通创' req . path })});}4.4.5 ejs模板

模板引擎是一种工具,它将页面模板与要显示的数据相结合,以生成HTML页面。如果上面提到的express中的路由控制方法相当于MVC中的控制器,那么模板引擎就相当于MVC中的视图。

模板引擎的功能是将页面模板与要显示的数据相结合,生成HTML页面。它可以在服务器和客户端上运行。很多时候都是在服务器端直接解析成HTML,解析后传输给客户端,客户端甚至无法判断页面是否是模板引擎生成的。有时模板引擎也可以在客户端,即浏览器上运行。典型的代表是XSLT,它以XML为输入,在客户端生成HTML页面。但是,由于浏览器兼容性问题,XSLT不是很受欢迎。目前主流是服务器运行模板引擎。

在MVC架构中,模板引擎包含在服务器端。控制器获得用户请求后,从模型中获取数据,并调用模板引擎。模板引擎将数据和页面模板作为输入,生成HTML页面,然后将它们返回给控制器,控制器再将它们返回给客户端。

==ejs是一种模板引擎,使用起来非常简单,与express很好的集成。==

我们通过以下两行代码设置模板文件和模板引擎的存储位置:(在app.js文件中进行的设置)

app . set(' view ',_ _ dirname '/view ');app.set('view engine ',' ejs ');doctype html head title %=title %/title link rel='样式表' href='/样式表/style . CSS '/head body h1 %=title %/h1 p欢迎使用%-title%/p/body/html描述:

ejs的标签系统非常简单,它只有以下三个标签:

% code %:JavaScript代码。%=代码%:显示被替换的HTML特殊字符的内容。(即如果代码中有标签,则按原样输出,不会被浏览器解析)%- code%:显示原始HTML内容。(如果有A标签,你会在浏览器端看到一个超链接。)路由代码:

Router.get ('/',function (req,RES,next) {res.render ('index ',{ title : ' a href=' http://www . Baidu.com ' Baidu/a ' });});ejs中对应的代码将被title的值替换。生成的代码:

!doctype HTML Head title a href=' http://www . Baidu.com ' Baidu/a/title link rel='样式表' href='/样式表/style . CSS '/Head body h1a href=' http://www . Baidu.com ' Baidu/a/h1p欢迎访问a href=' http://www . Baidu.com ' Baidu/a/p/body/HTML以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

版权声明:Node.js和Express简介是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。