宝哥软件园

nodejs教程之环境安装及运行

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

让nodeJS跑起来

第一步当然是安装nodeJS环境了,现在窗子安装nodeJS比较快了,直接下载即可:

http://www.nodejs.org/download/

这里根据需要下载,下载完成后直接下一步下一步即可,完了我们就具有nodeJS环境了

第二步,为了方便我们后面操作,我们直接在D盘见了一个文件夹博客

然后打开窗子命令行工具,进入d盘,输入:

复制代码代码如下:express -e博客

然后里面可能有依赖包,我们需要进入博客目录安装(安装的配置由package.json提供):

复制代码代码如下:npm安装

这个样子,我们依赖包就下载下来了,其中依赖包与爪哇岛的包文件,网的基地址定位连接文件应该是一个概念

这个时候,我们的程序已经可以运行了:

复制代码代码如下:节点应用

复制代码代码如下:D:blognode appExpress服务器正在监听端口3000

这个时候打开浏览器就有反应了:

这里我们使用的是快递(一个流行的nodeJSweb开发框架),并且使用了EJB模板引擎

文件结构

初始化文件目录结构如下:

app.js为入口文件

package.json为模块依赖文件,我们使用国家预防机制安装时候他会以其配置在网上下载相关包

节点_模块为下载下来的模块文件(package.json)

公众的存放静态资源文件

路线存放路由文件

视图存放相关视图模板文件

这个样子,我们基本目录结构就出来了,我们这里先简单说下节点_模块这个目录

节点_模块/ejs

我们刚刚说了,这里面存放着下载下来的模块,说白了就是射流研究…文件集合

复制代码代码如下: var parse=导出。parse=function(str,options){ var options=options | | { },open=options。打开| |出口。open | | ' % ',close=options。关闭| |导出。close | ' % ',filename=options.filename,compileDebug=options。compileDebug!==false,buf=

buf=' var buf=[];';如果(假的!==选项_with) buf='nwith(局部变量|| {}) {(函数(){ ';buf=' n buf。push( ' ';

var行号=1;

var consumeEOL=falsefor (var i=0,len=str.length我透镜;I){ var stri=str[I];if (str.slice(i,open。长度I)=开){ I=开。长度变化前缀,后缀,行=(compileDebug?_ _堆栈。行号=' : ' ')行号;switch(str[I]){ case '=' : prefix=' ',escape((' line ',';后缀='),' ';我;打破;大小写'-':前缀=' ',(' line ',';后缀='),' ';我;打破;默认值:前缀=' ');'行;后缀=';buf。push(');}

var end=str.indexOf(close,I),js=str.substring(i,end),start=i,include=null,n=0;

if('-'==js[js。length-1]){ js=js。子串(0,js。长度-2);consumeEOL=true}

if (0==js.trim().indexOf(' include '){ var name=js。trim().切片(7)。trim();if(!文件名)抛出新错误('文件名选项对于包含是必需的');var path=resolveInclude(名称,文件名);include=read(路径,' utf8 ';include=exports.parse(include,{ filename: path,_with: false,open: open,close: close,compiledebu g : compileDebug });buf=' '(function(){ ' include ' })()' ';js=}

while (~(n=js.indexOf('n ',n))) n,linenoif (js.substr(0,1)=' : ')js=filtered(js);if(js){ if(js。'//')js的LastIndex。的last index(' n ')} js=' n ';buf=前缀;buf=jsbuf=后缀;} i=结束-开始关闭。长度-1;

} else if(stri==' '){ buf=' ';} else if(stri==' ' '){ buf=' ';} else if (stri=='r') { //忽略} else if(stri==' n '){ if(consume eol){ consume eol=false;} else { buf=' nlineno } } else { buf=stri } }

如果(假的!==选项. with)buf=' ');})(); n } 返回buf。联接(" ");else buf=' '); n返回buf。联接(" ");";返回buf };

例如,我们在这里使用ejs模板和express模块,然后我们好奇地走进ejs程序,看看有什么不同

打开ejs.js后,我们画了一小段代码来看看:这段代码我们很熟悉,它与下划线的模板引擎代码一致,后者将模板解析为字符串

然后通过eval或新的function方法将其转换为函数,并传入您自己的数据对象以便于解析

至于具体的工作流程,我们还不知道,只能放在后面的点去研究。好的,我们现在进入其他模块

app.js

作为一个入口文件,app.js起着举足轻重的作用:

复制的代码如下:/***模块依赖关系。*/

var express=require(' express ');var routes=require('。/routes’);var user=require('。/routes/user’);var http=require(' http ');var path=require(' path ');

var app=express();

//all environmentsapp.set('port ',process . env . port | | 3000);app . set(' view ',path.join(__dirname,' view '));app.set('view engine ',' ejs ');app . use(express . fav icon());app . use(express . logger(' dev '));app . use(express . JSON());app . use(express . URL encoded());app . use(express . method override());app . use(app . router);app . use(express . static(path . join(_ _ dirname,' public ')));

//development only if(' development '==app . get(' env '){ app . use(express . error handler());}

app.get('/',routes . index);app.get('/users ',user . list);

http.createServer(app)。listen(app.get('port '),function(){ console . log(' Express server侦听端口' app . get(' port ')));});

我们通过require()命令加载express和http模块,并将加载模板文件,如routes目录中的index user。

App。设置('端口',进程。环境。端口| | 3000)是设置启动时间的端口

app . set(' view ',__dirname '/view ')是设置模板文件的路径,其中_ _ dirname是一个全局变量,存储当前脚本所在的目录,这样我们就可以查看:

复制代码如下: console . log(_ dirname);//index.js添加以下代码/* * d: blog节点app express服务器lid3360 blog routes */

至于这个__dirname是怎么获得的,暂时不需要关注

App.set('视图引擎',' ejs ')将模板引擎设置为ejs

App.use(express.favicon())是设置图标,如果想修改,自己做public下的图片文件。

app . use(express . logger(' dev '));快递靠连接。这里,内置的中间件将输出一些日志

app . use(express . JSON());为了解析请求主体,字符串将在这里被动态转换为json对象

app . use(express . method override());Connect内置中间件用于处理post请求,可以伪装http方法,如put

app . use(app . router);调用路由器解析规则

app . use(express . static(path . join(_ _ dirname,' public ')));连接内置中间件,在根目录下设置公共存储静态文件

复制代码如下: if(' development '==app . get(' env '){ app . use(express . error handler());}

这句话的意思是在开发条件下输出错误信息

复制代码如下:app.get('/',routes . index);app.get('/users ',user . list);

这两句是访问时具体的处理文件。例如,routes.index在直接访问此处时默认被访问

那么模板数据实际上是在内部解析的:

复制代码如下: exports . index=function(req,RES){ console . log(_ dirname);res.render('index ',{ title : ' Express ' });};

最后,将调用上面的代码来创建一个http服务器并监听3000个端口。成功后,你可以在网页上询问

途径

我们之前使用这种方法来构建路线

复制代码如下:app.get('/',routes . index);

上面的代码可以用这个代码代替(写在app里)

复制代码如下:app.get ('/',function (req,RES) {res.render ('index ',{ title : ' express ' });});

这段代码意味着当访问主页时,调用ejs模板引擎来呈现index.ejs模板文件

现在做一点修改。上面的代码实现了路由功能,但是我们不能把路由相关的代码放在app里。经过更多的路由,app会变得臃肿,所以我们把相关的配置放在索引里

因此,删除app中的相关路由功能,并在app末尾添加代码:

复制代码如下: routes(app);

然后修改index.js

复制的代码如下:模块。exports=function (app) {app。get ('/',function (req,res) {res.render ('index ',{ title : ' express ' });});};

这段代码是如何组织的还不清楚,我们也没有注意。我们过会儿再看

路由规则

Express封装了各种http请求,我们通常使用get/post

复制代码如下: app . get();app . post();

第一个参数是请求路径,第二个参数是回调函数,或者两个参数是请求和响应

然后,请求(request)有以下规则

Req.query处理获取请求并获取获取请求的参数

Req.params以/: xx的形式处理get或post请求

Req.body处理发布请求并获取发布请求的正文

Req.params处理get和post请求,但搜索优先级是req.params-req.body-req.query

路径规则也支持正则化,我们将在后面讨论.

添加路由规则

当我们访问一个不存在的链接时:

因为没有/y的路由规则,他也不谈论公共下的文件,所以是404

现在我们在index.js中添加相关的路由:

复制的代码如下:模块。exports=function (app) {app。get ('/',function (req,res) {res.render ('index ',{ title : ' express ' });});Get ('/y ',函数(req,RES) {res.send('叶小钗');});};

我的页面在这里乱码:

原因是下载后我的文件是gbk的代码。我们必须把它改成utf-8。我们将把他单独留在模板引擎中。让我们进入下一部分

注册功能

这里我们跟着原博主做一个简单的注册功能。这里我们使用mongo db作为数据库,然后我们将依次改进这些功能

创建一个新的注册路由,并为其创建一个新的注册模板,让我们开始吧

在索引中创建新路线

复制的代码如下:app.get ('/register ',function (req,res) {res.render ('index ',{ title : ' registration page ' });});

复制的代码如下:模块。exports=function (app) {app。get ('/',function (req,res) {res.render ('index ',{ title : ' express ' });});

Get ('/y ',函数(req,RES) {res.send('叶小钗');});

Get ('/register ',function (req,RES) {res.render ('register ',{ title : ' register page ' });

});

复制代码如下:DOCTYPE html html head title %=title %/title link rel='样式表' href='/样式表/style . CSS '/head body h1 %=title %/H1表单方法='post' div用户名:输入类型=' text ' name=' name '/div密码:输入类型=' password ' name=' password '/div div输入类型=' submit ' value=' log in '/div/form/body/html

这样,我们的页面就形成了:

有了基本的程序,我们现在需要数据库支持,所以我们需要安装mongoDB环境

MongoDB

MongoDB是一种基于分布式文件存储的NoSQL,由C. MongoDB编写,支持松散的数据结构,类似于json。我们知道json可以支持任何类型,所以我们可以提出非常复杂的结构

复制的代码如下:{ id: 1,名称: '叶小钗',Frinds: [{ID : 2,名称3360 '素还真' } },{id: 3,名称: '一页书' }]}

安装MongoDB

首先,去http://www.mongodb.org/downloads下载安装文件,然后将文件复制到D驱动器并将其名称更改为mongodb,然后在其中创建一个新的博客文件夹

然后打开命令行工具将目录切换到bin,并输入:

复制的代码如下: MongoD-dbPath d : MongoDB blog

将博客文件夹设置为项目目录并启动数据库。为了方便起见,我们将编写一个命令,并直接单击它来启动数据库:

复制的代码如下:d 3360 MongoDB bin MongoDB . exe-dbpath d : MongoDB blog

链接MongoDB

数据库安装成功后,我们的程序还需要相关的“驱动”程序来链接数据库。当然,在这个时候,我们必须下载软件包.

打开package.json并在依赖项中添加一个新行

复制代码的代码如下: { ' name ' : ' application-name ',' version' :' 0.0.1 ',' private' : true,' scripts ' : { ' start ' : ' node app . js ' }。依赖项' : { 'express': '3.4.8 ',' ejs': '* ',' mongodb ' : ' * ' }

然后运行npm install来下载一个新的依赖包,这样mongoDB相关的驱动程序将可用,并且需要其他依赖包来链接mysql和其他数据库

此时,在根目录中创建一个setting.js文件来保存数据库连接信息

复制的代码如下:模块。exports={ cookie secret : ' my blog ',db:' blog ',host 3360 ' localhost ' };

Db是数据库名称,host是数据库地址,cookieSecret用于cookie加密,与数据库无关

然后在根目录下创建一个新的models文件夹,并在models文件夹下创建一个新的db.js

复制代码如下:VAR设置=要求('./settings '),db=require ('MongoDB ')。db,connection=require ('MongoDB ')。连接,服务器=必需(' MongoDB ')。服务器;模块.导出=新的db(设置. Db,新的服务器(设置.主机,连接。DEFAULT_PORT),{ safe : true });

复制代码如下:newdb (settings.db,new server (settings.host,connection.default _ port),{ safe : true });

设置数据库名称、数据库地址和数据库端口以创建数据库实例,并通过module.exports导出实例,以便您可以通过require读写数据库

为了成功地写入数据库,服务器端程序需要处理post信息,因此我们在models文件夹下创建了一个新的user.js

复制代码如下:var mongodb=require('。/db ');

函数User(User){ this . name=User . name;this . password=user . password;};

模块。导出=用户;

//存储用户信息user.prototype.save=function(回调){//要存储在数据库中的用户文档varuser={name3360this.name,password 3360 this . password };//打开数据库MongoDB.open(函数(err,db){ if(err){ return callback(err);//错误,返回err信息}//读取users collection db . collection(' users ',函数(err,collection){ if(err){ MongoDB . close();返回回调(err);//错误,返回错误信息}//将用户数据插入用户集合。insert (user,{safe: true},function (err,user) {MongoDB。close();if(err){ return callback(err);//错误,返回错误信息}回调(null,用户[0]);//成功!Err为null,返回存储的用户文档});});});};

复制代码如下://读取用户信息用户。get=函数(名称,回调){//打开数据库MongoDB。Open (function (err,db){ if(err){ return callback(err);//错误,返回err信息}//读取users collection db . collection(' users ',函数(err,collection){ if(err){ MongoDB . close();返回回调(err);//错误,返回错误信息。}//查找用户名(name key)为name collection的文档。findone ({name:name},函数(err,user) {MongoDB。close();if(err){ return callback(err);//失败!返回错误信息}回调(null,用户);//成功!返回查询到的用户信息});});});};

这里,一个是写数据,另一个是读数据,处理程序是可用的。现在,需要在index.js前面添加以下程序

复制代码如下:VAR USER=REQUIRE('./models/user . js ');

然后修改app.post('/register ')

复制代码如下:app.post ('/register ',function (req,RES){ var name=req . body . name;var pwd=req . body . password;var newUser=新用户({ name: name,password : pwd });新用户。save(函数(err,user){//相关操作,写session res.send(用户);});});

然后点击注册,就会有反应

如果此时不确定是否写入数据库,可以进入数据库进行查询,先切换到数据库目录

复制的代码如下:d3360 MongoDB bin

输入:

复制代码如下:mongo

然后切换它的数据库连接到博客

复制代码如下:使用博客

最后输入

复制代码如下:db.users.find()

我们所有人都很高兴看到数据被写入,所以今天的研究暂时结束了

标签

今天,我们跟随一个博客完成了从安装到写入数据库的操作。明天我们再补充其他方面,一步一步加深nodeJS的学习

更多资讯
游戏推荐
更多+