Node.js建站之详解express与ejs(二)

基于Node.js Express搭建Https服务器 内容:1、安装Node.js2、安装Express和express-generator3、利用express-generator生成新项目4、生成SSL证书5、将项目从http转换为https关键词:Node.js,Express,Https,EJS,SSL证书                                                         1、安装Node.js(... 阅读详情

上一节讲了express的目录结构和其中一些文件的主要内容,今天补充express的路由控制

express路由控制

工作原理

上面提到过 app.js 中

var users = require('./routes/index');
app.use('/', index);   

可以用以下代码取代:

app.get('/', function(req, res){ res.render('index', { title: 'Express' });
};)

这段代码的意思是当访问主页时,调用 ejs 模板引擎,来渲染 index.html模版文件(即将 title 变量全部替换为字符串 Express),生成静态页面并显示在浏览器里。

我们把路由放到一个单独的文件routes/routes.js文件,便于我们管理路由。把实现路由的函数抽取出来plugins文件夹下

修改下面代码

app.set('view engine', 'ejs');

修改后,依然使用ejs引擎,但文件后缀名已经变为我们熟悉的html

app.set('view engine', 'html');
app.engine('html', require('ejs').__express);

在 app.js 最后添加一行代码:

routes(app);

这里只放登录注册部分代码,博客方面可以自己试着扩展,如果实在写不出,参考github地址:https://github.com/Destinygu/node-blog ,修改 routes.js 如下:

var userPlugin = require('../plugins/user');

module.exports = function (app) {

    app.use(function (req, res,next) {
        var user = req.session.user;
        if(user){
            //一次性存入的变量
            app.locals.user = user;
        }else{
            app.locals.user = user;
        }
        next();
    });

    //首页
    app.get('/',blogPlugin.indexList.get);

    //登录
    app.get('/login',userPlugin.loginNo.no,userPlugin.login.get);
    app.post('/login',userPlugin.login.post);
    //注册
    app.get('/reg',userPlugin.loginNo.no,userPlugin.reg.get);
    app.post('/reg',userPlugin.reg.post);
    //404
    app.use(function(req, res){
        res.render("404");
    });
};

路由规则

express 封装了多种 http 请求方式,我们主要只使用 get 和 post 两种。get和 post的第一个参数为请求的路径,第二个参数为处理请求的回调函数,回调函数有两个参数分别是 req 和 res,代表请求信息和响应信息 。路径请求及对应的获取路径有以下几种形式:

req.query : 处理 get请求

req.params : 处理 /:xxx形式的 get请求

req.body : 处理 post请求

req.param() : 可以处理 get和 post请求,但查找优先级由高到低为req.params→ req.body→ req.query

注意以上不带括号的为非函数,使用时如:req.params.user,至此我们新建文件plugins/user.js

var ModelUser = require('../model/user');
var crypto=require('crypto');

//登录
module.exports.login = {

    get : function(req,res,next){
        res.render('login',{title:'login'});
    },

    post : function (req, res, next) {
        var postData = {
            email : req.body.email
        };
        var md5=crypto.createHash('md5');
        var password_md5 =md5.update(req.body.password).digest('hex');

        var resJson = {
            status: false,
            msg: ''
        };
        // 向界面返回获取到的数据
        // res.send(postData);
        ModelUser.findOne(postData,function (err, data) {
            if(err){
                console.log(err);
            }
            if(data) {
                if (data.password == password_md5) {
                    req.session.user = data;
                    resJson.msg = '登录成功';
                    resJson.status = true;
                    res.send(resJson);
                    // res.redirect('/user/'+data._id);
                } else {
                    resJson.msg = '密码错误';
                    res.send(resJson);
                }
            }else{
                resJson.msg = '没有此用户';
                res.send(resJson);
            }
        });
    }
};

//注册
module.exports.reg = {
    get : function(req,res,next){
        res.render('reg',{title:'reg'});
    },
    post: function(req,res,next){
        //进行md5加密
        var md5=crypto.createHash('md5');
        var password_md5 =md5.update(req.body.password).digest('hex');

        var postData = {
            name : req.body.name,
            password :password_md5,
            email : req.body.email
        };

        var resJson = {
            status : false,
            msg : ''
        };

        ModelUser.findOne({
            email:req.body.email
        },function (err, data) {
            if( err ) console.log(err);
            if(data){
                resJson.msg = '此邮箱已被注册';
                res.send(resJson);
            }else{
                ModelUser.create(postData,function (err, data) {
                    if(err){
                        resJson.msg = '注册错误';
                        res.send(resJson);
                        console.log(err);
                    }else{
                        resJson.msg = '注册成功';
                        resJson.status = true;
                        req.session.user = data;
                        res.send(resJson);
                    }
                });
            }
        });
    }
};

ejs模板引擎

虽然express现在默认的模板引擎是jade,但个人比较喜欢用ejs,写法上感觉有点像jsp,下面简单介绍到本站开发用到的ejs技术。

ejs 的标签有三种:
<% code %>:JavaScript 代码。
<%= code %>:显示替换过 HTML 特殊字符的内容。
<%- code %>:显示原始 HTML 内容。

注意:
<%=code%> 和 <%- code%> 的区别,当变量 code 为字符串时,两者没有区别。当 code 比如为 <h1>node</h1>时, <%=code %> 会原样输出<h1>node</h1> ,而 <%-code%> 则会将h1解析出大标题node。

模块的逻辑支持

所有使用 <% %> 括起来的内容都会被编译成 Javascript,你可以在模版文件中像写 js 一样写自己的代码,也允许你声明变量,作用域就是当前模版,因为一个模版会被编译成一个 Javascript 函数,这点真的很像Jsp
示例:

    <% var name = "littledu" %>
    <div>
    Hello, My Name is <%-name %>
    </div>

循环

就像写 Javascript 一样

<ul>
    <% for(var i = 0; i < 10; i++) {%>
    <li>我是列表 <%-i %></li>
    <% } %>
<ul>

Includes

Include 可以引用相对路径的模版文件,在view中创建common文件夹,添加header.js,footer.js。

header.js

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
</head>
<body>

footer.js

</body>
</html>

于是view目录下的index.html就可以写成这样

<% include common/header.html %>
    <h1>我是主页</h1>
<% include common/footer.html %>

考虑单独抽取部分来讲会比较容易理解,但难免在抽取中有所遗漏,希望大家指出。差不多准备考试了,今天就更到这…

【Node.js教程】Express框架入门:从搭建到动态渲染商品列表 本文介绍了使用Express框架开发Web应用的基础知识,包括:1)Node.js作为JavaScript运行环境的定位;2)Express项目创建与配置;3)路由设置与中间件使用;4)EJS模板引擎实现动态渲染。教程详细演示了如何从零搭建项目、处理静态文件、配置路由映射,并通过商品列表案例展示了动态渲染的实现方法。文章还对比了GET与POST请求的区别,适合前端开发者学习后端开发的基础技能。 阅读详情

相关推荐

8、Node.js Express框架

Node.js Express框架

weixin_43631940的博客 1398

Node中的模块引擎EJS

Node中的模块引擎EJS基本使用

m0_62785037的博客 580

Node.js | 一文带你了解 EJS 模板引擎

EJS是一套简单的模板语言,帮你利用普通的JavaScript代码生成HTML页面,这称为模板引擎,在服务端渲染中普遍使用。在上一篇服务端渲染的讲解中我们已经提到过ejs这个模板引擎,模板引擎在前后端不分离的时代中经常使用,但随着前后端分离模式、单页模式(SPA应用,如Vue、React,是前后端分离模式的一种应用)的普及,模板引擎的使用率逐渐下降,直到今天已经很难在一个新项目中发现模板引擎的影子了。所以本篇文章并不会过多深入讲解EJS,大家知道它的应用场景以及如何使用它即可。

前端之行,任重道远! 7179

Express全系列教程之(十一):渲染ejs模板引擎

一、简介 相比于jade模板引擎,ejs对原HTML语言就未作出结构上的改变,只不过在其交互数据方面做出了些许修改,相比于jade更加简单易用。因此其学习成本是很低的。 二、ejs基本使用 这里我们使用如下配置文件: 我们啊可以通过下面的方式实现基本的ejs操作: app.js文件: const express=require("express"); const ejs=require("ejs...

no10086的博客 1103

Node.js和Express框架结合EJS实现模拟登录Demo项目

Node.js 是一个非常流行的开源服务器端 JavaScript 运行环境,它允许开发者使用 JavaScript 来编写各种服务器端应用。Node.js 基于 Chrome V8 引擎,并采用事件驱动、非阻塞 I/O 模型,使其轻量又高效,非常适合运行在分布式设备的远程服务端。Express中间件是函数,它可以访问请求对象(req)、响应对象(res)以及应用程序的请求-响应周期中的下一个中间件函数。中间件函数可以执行以下任务:执行任何代码。对请求和响应对象进行更改。

weixin_42405592的博客 951

Node.js Express模板快速入门:含用户认证与EJS视图引擎

Node.js是近年来十分流行的技术,它得益于JavaScript的强大和灵活性,推动了后端开发向轻量级、高效和事件驱动方向发展。本章将带领读者了解Node.js诞生的历史背景、它独特的特点,以及它在快速构建可扩展网络应用中的优势。中间件是Node.js中一个非常重要的概念,尤其是在Express.js框架中。简单来说,中间件是一个函数,它可以访问请求对象(request)、响应对象(response)和应用程序的请求-响应循环中的下一个函数,即所谓的应用程序中的下一个中间件。

weixin_42163404的博客 952

ejs模板引擎

ejs模板语法 简单使用 https://ejs.bootcss.com/

ice-bear 948

应用软件——Altium Designer 19 Gerber/坐标文件

如何输出Gerber文件 步骤如下: 打开需要输出的PCB文件 2. 设置原点坐标 3. 打开Gerber Files 选项,File–>Fabrication Opuputs–>Gerber Files。 4. General参数设置。 用于指定输出Gerber文件中使用的单位(Units)和格式(Format)。单位可以是公制(Millimeters)和英制(Inches);格式栏中2:3,2:4,2:5代表文件中使用的不同数据精度,其中2:3表示数据含2位整数3位小数;相应的,另外两个分

染血黑兔的博客 7205

express中res.sendFile、res.render、express.static()三者的使用

一、res.sendFile 必须使用绝对路径,它的作用是响应出去一个文件,可以直接返回html文件做渲染。 app.get("/kkk", (req, res) => { res.sendFile(path.resolve(__dirname,"./views/insertArticle.html")); }); 浏览器访问http://localhost:8000/kkk,其实就是在访问insertArticle.html文件。 二、res.render 使用这个方法就代表需要用到“模板引擎

柒君的博客 6173

51单片机智能小车

最近学校举办了一个智能小车比赛,比赛内容为用手机蓝牙控制小车拥有5个功能,分别是超声波舵机避障,测距(显示在LCD1602上), 红外跟随,循迹还有蓝牙控制小车前进后退左转又转以及停止。 文章目录 蓝牙控制所有功能 一、蓝牙控制前进后退左转右转停止 二、舵机超声波避障加测距 三、红外跟随 四、循迹 五、代码部分 六、完整代码 前言 基于51单片机的智能小车是比较基础的小车,很适合初学者学习 提示:以下是本篇文章正文内容,下面案例可供参考 一、整体思路 这款小...

m0_55977420的博客 1万+

期货套利策略(二)

接上一篇期货套利策略,随着对期货套利策略的深入了解,我发现套利策略不是那么好做的。下面将会讲碰到的一些问题。 上一篇文章中没有考虑滑点的问题,这里我们把滑点问题考虑进去。这里先说一些天勤api的买入点,天琴的买入点是当前K线的收盘价。碰到数据传输问题,还有计算等各方面问题,实际情况是无法在当前K线的收盘价买入的。这里我们把这方面问题考虑进去,利用api.wait_update()调到下一个k线数据...

qq_31611005的博客 1713

Ejs模板引擎注入实现RCE

EJS是一个javascript模板库,用来从json数据中生成HTML字符串。

2302_76827504的博客 2551

自顶向下与自底向上编程思想的对比

一、核心定义与本质差异自顶向下编程思想如同绘制一幅完整的地图,从整体轮廓逐步细化到局部细节。其本质是从系统的整体目标出发,通过逐层分解将复杂问题简化为可实现的子问题,强调先定义 “做什么”,再考虑 “如何做”。自底向上编程思想则类似于搭建积木,从基础组件开始逐步构建复杂系统。其本质是从现有资源和基础功能出发,通过组合和扩展简单组件来实现复杂功能,强调先解决 “如何做” 的细节,再整合为 “做什么” 的整体。二、设计起点与逻辑流程对比设计起点:以系统的整体目标和业务需求为起点。例如设计一个电商平台,首先明确

二进制君 834

node.js 详解

node.js 详解

m0_55557411的博客 5万+

手把手教你学simulink(8.39)--基于Simulink的步进电机(Stepper Motor)仿真实例

通过这个仿真实例,你可以学习如何使用Simulink构建和仿真步进电机(Stepper Motor)系统。你可以根据实际需求调整模型和参数,进行更复杂的仿真和分析。希望这个例子对你有所帮助,祝你学习愉快!

MHD0815的博客 1052

【WRFDA教程】客观分析(OBSGRID)详解

客观分析(OBSGRID)详解

WW、forever的博客 1134

node.js——express框架

Express 是一个流行的 Node.js 框架,为开发者提供了简洁的 API,用于处理 HTTP 请求、响应,以及管理中间件、路由和错误处理。Express 简化了构建 RESTful API、Web 应用程序和微服务的过程。快速开始Express 框架是构建 Node.js Web 应用程序的理想选择。它提供了强大且易于使用的工具,可以满足各种不同类型的 Web 开发需求。本期到此结束,关注我,我会继续写的!!

weixin_64916164的博客 5424

ARM6818嵌入式视频播放器:硬解加速与Framebuffer渲染实战

嵌入式Linux音视频系统是智能座舱、工业HMI等场景的核心能力,其本质是软硬协同的实时多媒体处理系统。原理上需打通内核驱动(如VPU硬件编解码、FIMD多图层合成)、用户空间框架(GStreamer pipeline定制、SDL2硬件渲染)与应用层同步机制(PTS/HTS双时钟校准)。技术价值在于显著降低CPU负载(硬解可压至15%以下)、提升启动速度(<1.2s首帧)并保障音画同步精度(±3ms级)。典型应用场景包括车载信息娱乐、边缘AI终端及无X11的工控显示设备。本文基于ARM6818平台,深入VP

weixin_32456485的博客 78

Node后端基础3-认识Express框架以及ejs的基本使用

在本篇文章中,我们主要说一下Node的一个视图模板ejs,和express框架Node支持的视图模板有很多,之所以选择ejs是因为他对刚接触Node的兄弟很友好,容易上手。

weixin_66548031的博客 2412

12、硬件工程师笔试面试——MOS管(2025版本)

在设计和测试过程中,可以参考相关的EMC测试标准和指南,如CE认证EMC电磁兼容测试介绍 和电磁兼容性(EMC)测试方法与整改指南 ,以及电磁兼容(EMC)的标准与测试内容 ,来确保MOSFET的EMC性能符合行业标准。在高频应用中,MOSFET的开关速度对电路的整体性能至关重要。是一款高电压同步N沟道MOSFET驱动器,具有自举电源电压至114V的能力,宽VCC电压范围,自适应贯通保护功能,以及高达1.4A的峰值顶端栅极上拉电流,适用于分布式电源架构、汽车电源、高密度电源模块和电信系统等应用。

XU157303764的博客 7095

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

EJS + Express基本使用

小菜鸟在摸鱼

MoXinXueWEB的博客 4474

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

node.js 实战——从0开始做一个餐厅预订(express+node+ejs+bootstrap)

模板引擎语法风格学习曲线渲染性能特点/适用场景EJS类似 HTML + JS🟢 简单🟢 快最通用、轻量、入门推荐Pug(原 Jade)缩进式语法🟡 有点怪🟢 快简洁、有层次感,但需适应HandlebarsMustache 风格🟢 简单🟡 中等强逻辑隔离,适合大团队模板开发Nunjucks类似 Django🟢 简单🟢 快功能全、适合内容型网站(支持宏)混合方案🟡 复杂🟡 看项目前后端混合渲染项目(不推荐长期用)###🚦怎么选?

weixin_46282323的博客 1890

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Node.js Express 框架2:防盗链,ejs模板引擎,express-generator

​ 盗链是指在自己的页面上展示一些并不在自己服务器上的一些内容, 获取别人的资源地址,绕过别人的资源展示页面,直接在自己的页面上向最终用户提供此内容。通过盗链的手段可以减轻自己服务器的负担。,其中你可以通过一个对象来传递任何东西。EJS是一套简单的模板语言,帮你利用普通的JavaScript代码生成HTML页面。我们可以对比以下两段代码,第一个是原生js语法,第二个是用ejs引擎进行列表渲染的语法,我们通过比对来认识它们的区别。它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的文档。

lilcur的博客 1390

使用express框架开发,如何在ejs文件中导入外部的js、css文件

首先看一下这篇文章:https://blog.csdn.net/MPFLY/article/details/78134980 已经写得很清楚了,内容如下: 最近在用nodejs写一点东西,当然也用到了express框架和ejs模版了。在使用ejs模版的过程中遇到了这个问题:如何在ejs模版中导入外部的js、css文件。 我猜测,ejs和html导入外部文件的方式应该是不一样的。但是我还是决...

acoolgiser的博客 8596

ejs获取js变量值_EJS变量(注入值)

ejs获取js变量值Hi! Welcome to NODE AND EJS TEMPLATE ENGINE SERIES. Today, we will talk about EJS variables or how we can inject values? 嗨! 欢迎使用NODE和EJS模板引擎系列。 今天,我们将讨论EJS变量或如何注入值? Just like normal JavaSc...

cumtb2002的博客 3086

Node.js中的Express框架利用jade,ejs进行后端渲染

Node.js中的Express框架利用jade,ejs进行后端渲染 Node.js环境安装 Node.js环境安装可以点击这里查看 express框架的安装和简单使用点击这里查看 后端渲染 前端渲染,根据后端返回的json数据,生成 jade jade介绍 jade使用 ejs ejs介绍 ejs使用 ...

k464746的博客 1345
上一篇: ES6为字符串做了哪些扩展?
下一篇: 常用 Git 命令清单
Hi-ZhiWei
博客等级 码龄10年 3粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值