首页 web前端 js教程 使用node.js 制作网站前台后台_node.js

使用node.js 制作网站前台后台_node.js

May 16, 2016 pm 04:31 PM
node.js 后台

node.js  能做什么?我至今也不清楚,他在哪方面应用比较广泛,我没有机会接触到那样的项目。只是因为喜欢,业余时间做了一个网站和后台。深刻领悟到一个道理那就是如果你喜欢一项技术可以玩玩,但是如果用到项目中就必须花些时间去解决很多问题。

使用到的技术:

express + jade

sqlite + sequelize  

redis

1. 关于jade

    支持include。  比如: include ./includes/header  header 是一个局部视图,类似asp.net  用户控件。

    支持extends。 比如: extends ../layout   使用母版页layout。

    for循环也是如此简单。   

复制代码 代码如下:

each item in userList  (userList 服务器传给前端的变量)
tr
  td #{item.username}
  td #{item.telephone}
  td #{item.email}

  比较喜欢append:

复制代码 代码如下:

extends ../admin_layout
append head
  link(rel='stylesheet', href='/stylesheets/font-awesome.css')
  script(src='/javascripts/bootstrap.js')
  script(src='/javascripts/bootstrap-wysiwyg.js')
  script(src='/javascripts/jquery.hotkeys.js')
block content

     append 会把脚步和样式全部放在 母版页面head后面。

2.sequelize  实现ORM的框架。 支持sqlite mysql mongodb

   定义模型(文章):

复制代码 代码如下:

var Article = sequelize.define('Article',{
  title:{
    type:Sequelize.STRING,
    validate:{}
  },
  content:{type:Sequelize.STRING,validate:{}},
  icon:{type:Sequelize.STRING,validate:{}},
  iconname:{type:Sequelize.STRING},
  sequencing:{type:Sequelize.STRING,validate:{}}
},{
  classMethods:{
    //文章分类
    getCountAll:function(objFun){
    }//end getCountAll
  }//end classMethods
});
Article.belongsTo(Category);

 Article.belongsTo(Category);  每一篇文章都有一个分类。

我把分页相关方法写到了初始化sequelize时候。这样每个模型定义时候,都会有这个方法(pageOffset、pageLimit)。

复制代码 代码如下:

var Sequelize = new Sequelize('数据库', '用户名', '密码', {
  // sqlite!现在!
  方言:'sqlite',
  // sqlite
的存储引擎   // - 默认 ':memory:'
  存储:config.sqlitePath,
  定义:{
    类方法:{
      pageOffset:函数(pageNum){
        if(isNaN(pageNum) || pageNum           页数 = 1; 
        }
        return (pageNum - 1) * this.pageLimit();
      },
      pageLimit:function(){
        返回10; // 每页显示10条
      },
      总页数:函数(totalNum){
        var Total =parseInt((totalNum this.pageLimit() - 1) / this.pageLimit()),
            arrayTotalPages = [];
        for(var i=1; i           arrayTotalPages.push(i);
        }
        返回 arrayTotalPages;
      }
    },
    实例方法:{
    }
  }
});

使用:

复制代码代码如下:

Article.findAndCountAll({include:[Category],offset:Article.pageOffset(req.query.pageNum), limit:Article.pageLimit()}).success(function(row){
    res.render('article_list', {
      title: '文章管理',
      文章列表:row.rows,
      页面:{
        TotalPages:Article.totalPages(row.count),
        currentPage:req.query.pageNum,
        路由器:'文章'
      }
    });
  });

保存模型:

复制代码代码如下:

Exports.add = function(req, res) {
  var form = new formidable.IncomingForm();
  form.uploadDir = path.join(__dirname, '../files');
  form.keepExtensions = true;
  form.parse(req, function(err, fields,files){
    var //iconPath = files.icon.path,
        //index = iconPath.lastIndexOf('/')         icon = path.basename(files.icon.path), // iconPath.substr(index 1,iconPath.length - index),
        iconname = 文件.icon.name;
    var title = fields.title;
        id = fields.articleId;
        标题 = fields.title,
        内容 = fields.content,
        mincontent = fields.mincontent,
        排序=字段.排序== 0? 0 : 1,
        类别 = fields.category;
       文章.sync();  //如果不存在就创建表。
      Category.find(category).success(function(c){
        var 文章 = Article.build({
          标题:标题,
          内容:内容,
          最小内容:最小内容,
          图标:图标,
          图标名称:图标名称,
          测序:测序
        });
        文章.save()
        .success(函数(a){
          a.setCategory(c);
          return res.redirect('/admin/article');
        });
      }); //结束类别
  });
}

路径.basename:

复制代码代码如下:

//iconPath = files.icon.path,
//index = iconPath.lastIndexOf('/') icon = path.basename(files.icon.path), // iconPath.substr(index 1,iconPath.length - index),

获取文件名,比如:/a/b/aa.txt   =>; aa.txt。   最初时候我使用截取字符串,也能实现,但是网络不一样的话就会有问题。mac使用'/' 。 window下面是'\',我也是配置完成之后才发现的问题。后来发现path.basename直接替换(文档阅读的少,就吃亏啊)。对node.js的好感在加1分。:)

3. redis 存储经常查询,而且数据很少变化。

复制代码代码如下:

getCountAll:function(objFun){
      redis.get('articles_getCountAll', function(err,reply){
        if(err){
          console.log(err);
          return;
        }
        if(reply === null){
          db.all('SELECT count(articles.CategoryId) as count,categories.name,categories.id FROM articles left join categories on articles.categoryID = categories.id group by articles.CategoryId ', function(err,row){
            redis.set('articles_getCountAll',JSON.stringify(row));
            objFun(row);
          });
        }else{
          objFun(reply);
        }
      });

    这个方法定义在了 model层。 因为是express,所以尽可能的 用mvc方式开发。 其实是route实现了controller层功能(route文件夹,应该命名为为controller)。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1666
14
CakePHP 教程
1426
52
Laravel 教程
1328
25
PHP教程
1273
29
C# 教程
1253
24
Discuz后台登录问题解决方法大揭秘 Discuz后台登录问题解决方法大揭秘 Mar 03, 2024 am 08:57 AM

Discuz后台登录问题解决方法大揭秘,需要具体代码示例随着互联网的快速发展,网站建设变得越来越普遍,而Discuz作为一款常用的论坛建站系统,受到了许多站长的青睐。然而,正是因为其功能强大,有时候我们在使用Discuz的过程中会遇到一些问题,比如后台登录问题。今天,我们就来大揭秘Discuz后台登录问题的解决方法,并且提供具体的代码示例,希望能帮助到有需要

图文详解Node V8引擎的内存和GC 图文详解Node V8引擎的内存和GC Mar 29, 2023 pm 06:02 PM

本篇文章带大家深入了解NodeJS V8引擎的内存和垃圾回收器(GC),希望对大家有所帮助!

一文聊聊Node中的内存控制 一文聊聊Node中的内存控制 Apr 26, 2023 pm 05:37 PM

基于无阻塞、事件驱动建立的Node服务,具有内存消耗低的优点,非常适合处理海量的网络请求。在海量请求的前提下,就需要考虑“内存控制”的相关问题了。 1. V8的垃圾回收机制与内存限制 Js由垃圾回收机

聊聊如何选择一个最好的Node.js Docker镜像? 聊聊如何选择一个最好的Node.js Docker镜像? Dec 13, 2022 pm 08:00 PM

选择一个Node​的Docker镜像看起来像是一件小事,但是镜像的大小和潜在漏洞可能会对你的CI/CD流程和安全造成重大的影响。那我们如何选择一个最好Node.js Docker镜像呢?

WordPress后台乱码烦恼?试试这些解决方案 WordPress后台乱码烦恼?试试这些解决方案 Mar 05, 2024 pm 09:27 PM

WordPress后台乱码烦恼?试试这些解决方案,需要具体代码示例随着WordPress在网站建设中的广泛应用,许多用户可能会遇到WordPress后台乱码的问题。这种问题会导致后台管理界面显示乱码,给用户的使用带来极大困扰。本文将介绍一些常见的解决方案,帮助用户解决WordPress后台乱码的烦恼。修改wp-config.php文件打开wp-config.

深入聊聊Node中的File模块 深入聊聊Node中的File模块 Apr 24, 2023 pm 05:49 PM

文件模块是对底层文件操作的封装,例如文件读写/打开关闭/删除添加等等 文件模块最大的特点就是所有的方法都提供的**同步**和**异步**两个版本,具有 sync 后缀的方法都是同步方法,没有的都是异

一起聊聊Node中的事件循环 一起聊聊Node中的事件循环 Apr 11, 2023 pm 07:08 PM

事件循环是 Node.js 的基本组成部分,通过确保主线程不被阻塞来实现异步编程,了解事件循环对构建高效应用程序至关重要。下面本篇文章就来带大家深入了解Node中的事件循环 ,希望对大家有所帮助!

聊聊用pkg将Node.js项目打包为可执行文件的方法 聊聊用pkg将Node.js项目打包为可执行文件的方法 Dec 02, 2022 pm 09:06 PM

​如何用pkg打包nodejs可执行文件?下面本篇文章给大家介绍一下使用pkg将Node项目打包为可执行文件的方法,希望对大家有所帮助!

See all articles