,我们给大家简单地介绍了 Node.js 以及简单的提了一下学习前的准备,不知道大家还记不记得呢?不记得的话,就回去翻一下哦!这一期就是剖析知识准备的三个点,大家拿好笔记本听课啦!

一、搭建Node.Js服务器

使用模块搭建服务器,这有助于快速开发,许多功能的实现不需要全部由自己编写,Node.js 提供许多开源的模块,只需下载后,在程序中声明一下即可使用,例如通过 const express = require ('express'),即引入了 Express 模块。

选择使用 Express 网络框架搭建服务器,下载并在程序中声明后,指定在 6868 端口监听:

const express = require('express');//express网络框架var server = express();server.listen(6868);   //在6868端口监听用户的请求

当服务器接收到用户的请求后,返回一个页面,一般来说,没有纯静态的页面,往往页面的某块信息要发生变化,例如新闻的更新。选择使用模板引擎后台渲染页面,好处就是页面是可以变化的,根据程序的数据生成。

Jade 和 ejs 是两大主流模板引擎,jade 书写起来简洁方便,但不能与其他 HTML、CSS 共存,ejs 的书写跟普通的  HTML 页面书写结构一样,因此也能跟 HTML、CSS 共存,各有各的好处,根据实际开发的需求选择合适的模板引擎。这里选择 ejs 模板引擎为例进行开发,引入模板引擎,并配置模板引擎,配置模板引擎需告诉程序输出什么东西,模板文件放在哪里以及使用哪种模板引擎:

const consolidate = require('consolidate');//模块引擎合并库//配置模板引擎//输出什么东西server.set('view engine', 'html');//模板文件放在哪儿server.set('views', './template');//哪种模板引擎server.engine('html', consolidate.ejs);

最后编写接收用户的请求,并返回的结果:

server.get('/', (req, res)=> {  //接收url为localhost:6868的请求   //执行操作   if (err) {       ‍//提示错误信息   } else {       ‍//返回页面   }});

在开发中往往服务器在接收到用户的请求后,需要处理的步骤是比较多的,所有的步骤都写在一起,出错了往往比较难找,使用链式操作,处理完第一个步骤后,传递给下一级处理,下一级继承上一级的处理结果,例如上一级创建了一个字符串变量,下一级就能使用此变量,这样有便于调错,也使得程序的可读性增加了许多,改写 Get 请求:

server.get('/', (req, res, next)=> {  //接收请求的url为localhost:6868   //执行操作   if (err) {       //提示错误信息   } else {       next();  //链式操作,传递给下一级处理   }});server.get('/', (req, res) => {  //接收请求的url为localhost:6868   //执行操作   if (err) {       ‍//提示错误信息   } else {       ‍//返回页面   }});

以上代码只传递了一次,根据步骤的复杂性,决定使用的传递次数,只需要在第二个操作中继续使用next()传递到下一级,直到最后一步操作即可。

二、查询数据库返回数据

在 Node.js 中连接数据库需要引入 mysql 模块,接着连接数据库,使用数据库连接池能提高安全性以及连接效率:

const mysql = require('mysql');//一个用于mysql的node.js驱动程序。它是用JavaScript编写的,不需要编译//使用数据库连接池,连接名为blog的数据库const db = mysql.createPool({ host : 'localhost', user : 'root',password : '', database : 'blog' });

连接数据库后便可以对数据库进行增删改查的操作,使用的语句与 MySQL 完全一样,例如select * from banner_table即表示查询表名为 banner_table 的所有数据。在 Node.js 中执行查询数据库并返回结果:

server.get('/', (req, res, next) => {  //查询banner的东西  db.query("select * from banner_table", (err, data)=>{    if (err) {      res.status(500).send('database error').end(); //提示数据库操作出错    } else {      res.banners = data;  //将查询到的结果赋值给banners      next();  //链式操作,传递给下一级处理    }  });});

query 用来执行语句,拥有两个参数,第一个参数代表要执行的语句,第二个参数为一个函数,代表执行完语句后的一个反馈行为,这个反馈行为也有两个参数,如果出错,提示错误信息 err,如果成功,获取查询到的结果 data。

三、使用数据渲染页面

使用数据渲染页面,即一个页面的内容并不是在 ejs 文件中写好的,是非静态的,由数据来决定。

例如:想在一个页面中显示一张图片,如果按照平时的做法,会直接使用<img src="images/1.jpg">插入一张图片,但如果想要用数据决定显示哪张图片,就需要对 src 属性值的书写做一些改变:<img src="<%= banners[i].src %>">,此种写法,是将 src 属性值赋值为服务器返回来的一个 JSON 中的 src 值,而这个值是从数据库查询得来的,所以事先也需要在数据库中存放好该值,而该值一般存放的是图片的路径名,数据库一般不存放图片文件,那样子很耗费资源并且效率低,存放图片路径名,渲染页面时,程序会根据路径名去相应的文件夹找到图片并渲染。

这一期的教程就到这里啦,大家学会了吗?下一期将着手编程实现宠物网站,记得留意下一期推文哦!

作者:陈晓辉

创智俱乐部ISA

一个让你涨姿势的社团