Node.js疾速开辟利器-Keystone.js

引见

Keystone是以Express和MongoDB为基本搭建的开源的Node.js CMS和web应用顺序平台。

Keystone在官网上宣称:在Node.js中,用Keystone搭建数据驱动的网站、应用顺序和API是最轻易的。

之所以出此大言,背地照样有料的,Keystone自带以下功用:

  1. 内置Express.js和MongoDB

  2. 动态路由

  3. 有用的数据库域范例

  4. 自动天生治理员界面

  5. 基于数据模子的表单处置惩罚

  6. 会话治理和认证功用

我以为keystone最牛逼的处所就是依据你定义的模子自动帮你完成背景治理界面,建立、治理、编辑和删除等,这得免却许多工夫了。如许完成一个网站只需定义model和写前端代码就好了。

这应该是前端猴子接外包的一个利器吧。

装置预备

  1. 装置node.js 0.10+

  2. 装置mongodb v2.4+

  3. 装置yeoman npm install -g yo

  4. 装置keystone天生器 npm install -g generator-keystone

最先

  1. 建立项目目次
    mkdir my-keystone

  2. 进入项目目次
    cd my-keystone

  3. 天生代码
    yo keystone

代码天生器会问你几个问题,比方项目名称,是不是内置博客、相册和联络表单,是不是增加User模子,增加治理员账户暗码

  1. 装置依靠
    npm install

  2. 运转项目
    node keystone

翻开http://localhost:3000 在浏览器检察
经由过程http://localhost:3000/keystone 翻开背景治理

Model

var keystone = require('keystone'),
    Types = keystone.Field.Types;
 
var Post = new keystone.List('Post', {
    autokey: { path: 'slug', from: 'title', unique: true },
    map: { name: 'title' },
    defaultSort: '-createdAt'
});
 
Post.add({
    title: { type: String, required: true },
    state: { type: Types.Select, options: 'draft, published, archived', default: 'draft' },
    author: { type: Types.Relationship, ref: 'User' },
    createdAt: { type: Date, default: Date.now },
    publishedAt: Date,
    image: { type: Types.CloudinaryImage },
    content: {
        brief: { type: Types.Html, wysiwyg: true, height: 150 },
        extended: { type: Types.Html, wysiwyg: true, height: 400 }
    }
});
 
Post.defaultColumns = 'title, state|20%, author, publishedAt|15%'
Post.register();

这是官网中给出的例子,一个文章的model,概况

不得不提一下,keystone的图片范例Types.CloudinaryImage,须要购置CloudinaryImage的效劳,假如你不想用Cloudinary的效劳的话,keystone还供应了Types.LocalFile,如许我们就能够把image改成:

image: { type: Types.LocalFile, dest: 'public/upload', 
        prefix: '/upload',
        format: function(item, file){
            return '<img src="'+file.href+'" style="max-width: 120px">';
        }
    }

这里format是指针对背景治理用的
假如你想运用CDN效劳的话,能够对图片文件夹进行了CDN同步,然后修正prefix为你的CDN供应商供应的前缀。

路由与视图

路由设置文件:routes/index.js
中间件:routes/middleware.js

var keystone = require('keystone'),
    middleware = require('./middleware'),
    importRoutes = keystone.importer(__dirname);
 
// 经常使用中间件
keystone.pre('routes', middleware.initErrorHandlers);
keystone.pre('routes', middleware.initLocals);
keystone.pre('render', middleware.flashMessages);
 
// 处置惩罚404毛病
keystone.set('404', function(req, res, next) {
    res.notfound();
});
 
// 处置惩罚别的毛病
keystone.set('500', function(err, req, res, next) {
    var title, message;
    if (err instanceof Error) {
        message = err.message;
        err = err.stack;
    }
    res.err(err, title, message);
});
 
// 加载路由
var routes = {
    views: importRoutes('./views')
};
 
// 绑定路由
exports = module.exports = function(app) {
    
    app.get('/', routes.views.index);
    
    // 在路由之前,经由过程中间件做任何事情
    app.get('/protected', middleware.requireUser, middleware.other, routes.views.protected);
    
}

设置

keystone供应了许多可设置项,你能够为所欲为地依据本身的需求设置,要相识Keystone支撑的更多选项,请拜见设置指南

设置须要修正的文件是keystone.js

项目构造

|--lib
|  定制的库和代码
|--models
|  顺序的数据库模子
|--public
|  公然的静态文件 (css、js、images等)
|--routes
|  |--api
|  |  顺序的api控制器
|  |--views
|  |  顺序的视图控制器
|  |--index.js
|  |  初始化顺序的路由和视图
|  |--middleware.js
|  |  为路由定制的中间件
|--templates
|  |--includes
|  |  通用的 .jade 组件放这里
|  |--layouts
|  |  基本 .jade 规划放这里
|  |--mixins
|  |  通用的 .jade mixins放这里
|  |--views
|  |  顺序的视图模板
|--updates
|  数据组装和迁徙剧本
|--package.json
|  给npm的项目设置
|--keystone.js
|  启动顺序的主剧本

瑕玷

keystone壮大的自动天生的治理背景,也是给我运用限定的处所,支撑增编削查、上传文件等基本功用,但是在一些营业定制下却有失灵活性,或许是我研讨不透,现在官方也没有给出对背景治理定制的文档,后续我将研讨下怎样深度定制治理背景,假如可行的话再来分享。

参考

中文文档:http://keystonejs.com/zh/docs/
项目地点:https://github.com/keystonejs/keystone

    原文作者:吴彦欣
    原文地址: https://segmentfault.com/a/1190000004646121
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞