概述
Blite 是一个整体后端服务器应用程序,带有内置服务,如用户身份验证、数据库、邮件确认等。它旨在为中小型 node.js 项目提供轻量级和快速原型设计。它建立在express之上,并使用controldb作为其数据库。
特征
- 快速的 javascript 文档导向数据库。
- 用户注册和认证。
- 电子邮件确认和密码重置。
- 上传文件。
- 具有用户注册、登录、配置文件和文件上传功能的演示应用程序。
安装
npm install blite
用法
const blite = require('blite');
blite.start()
// server is now running on port 3000
配置
可以通过blite.config.json
在项目的根目录中创建文件或将配置对象传递给函数来配置 Blite init
。以下是默认配置。这可以根据您的需要进行定制。
const config = {
server:{
port: 3000,
jwt_private_key: "replace this something long and random"
},
auth: {
cookie_name: "blite",
access_token_life: "10800000",
refresh_token_life: "7776000000"
},
email: {
from: "",
host: "",
port: 0,
username: "",
password: ""
},
upload: {
"max_file_size": 209715200,
"dir": ""
},
db: {
"name": "db",
"collections": []
}
}
blite.init(config).start()
演示应用
您可以按照以下方式运行演示应用程序:
const blite = require('blite');
blite.demo()
运行演示应用程序后,您可以访问它http://localhost:3000
。您可以查看文件demo
夹中的演示应用程序文件。演示应用程序是一个简单的用户注册、登录、配置文件和文件上传应用程序。
服务器
Blite 使用 express 作为它的服务器。您可以在此处查看 express 文档以获取更多信息。以下是一些最常用的服务器功能。
提供静态文件
假设您在项目的根目录中有一个名为的文件夹www
,其中包含 index.html 文件。您可以通过以下方式提供服务:
// file structure
project
├── www
│ └── index.html
└── main.js
// main.js
const blite = require('blite');
blite.init()
blite.server.use("/", blite.server.static(`www`) )
blite.start()
基本路由
以下示例说明了定义简单路由。
const blite = require('blite');
blite.init()
// Respond with Hello World! on the homepage:
blite.server.get('/', (req, res) => {
res.send('Hello World!')
})
// Respond to POST request on the root route (/), the application’s home page:
blite.server.post('/', (req, res) => {
res.send('Got a POST request')
})
//Respond to a PUT request to the /user route:
blite.server.put('/user', (req, res) => {
res.send('Got a PUT request at /user')
})
//Respond to a DELETE request to the /user route:
blite.server.delete('/user', (req, res) => {
res.send('Got a DELETE request at /user')
})
blite.start()
有关路由的更多详细信息,请参阅路由指南。
中间件
Blite 内置了用于身份验证、注册、登录、注销、密码重置和文件上传的中间件。
注册中间件
您可以通过以下方式提供用户名、电子邮件和密码,通过从客户端向您的服务器发送发布请求来注册用户:
// client side
const data = {
username: "username",
email: "email",
password: "password"
}
fetch("/api/register", {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
}).then((response) => {
//...
}).catch(err => {
//...
});
然后你需要在服务器端定义注册路由并通过以下方式将中间件传递给它:
// server side
blite.server.post("/api/register",
blite.mid.register, // passing register middleware here
async (req, res) => {
if (res.error) {
return res.status(400).json(res.error);
}
res.json({
message: "You successfully registered."
});
});
登录中间件
您可以通过以下方式提供用户名、密码和 rememberMe 标志,通过从客户端向您的服务器发送发布请求来登录用户:
// client side
const data = {
username: "username",
password: "password",
rememberMe: true
}
fetch("api/login", {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
}).then((response) => {
//...
}).catch(err => {
//...
});
然后你需要在服务器端定义登录路由并通过以下方式将中间件传递给它:
// server side
blite.server.post("/api/login",
blite.mid.login, // passing login middleware here
async (req, res) => {
if (res.error) {
return res.status(400).json(res.error);
}
res.json({
message: "You successfully logged in."
});
});
注销中间件
您可以通过从客户端向您的服务器发送发布请求来注销用户。不需要数据。发送请求后,访问令牌和刷新令牌将从数据库中删除。
// client side
fetch("api/logout", {method: 'POST'})
然后你需要在服务器端定义注销路由并通过以下方式将中间件传递给它:
// server side
blite.server.post("/api/logout",
blite.mid.logout, // passing logout middleware here
async (req, res) => {
// ...
});
认证中间件
您不希望用户每次访问您的应用程序时都登录。您可以使用身份验证中间件来检查用户是否已经登录。如果用户登录,blite 将存储访问和刷新令牌。当您发送使用身份验证中间件时,blite 将检查访问令牌是否有效。如果访问令牌有效,您可以通过以下方式从客户端向您的服务器发送发布请求来授予用户访问权限:
fetch("/api/authenticateSession", {
method: 'POST'
}).then((response) => {
// Give access to the user
}).catch(err => {
// Redirect to login page
});
然后你需要在服务器端定义 authenticateSession 路由,并通过以下方式将中间件传递给它:
blite.server.post("/api/authenticateSession",
blite.mid.authenticateSession, // passing authenticateSession middleware here
async (req, res) => {
// Now you can start making authenticated requests from client side
});
会话通过身份验证后,您可以通过以下方式使用 authenticeUser 中间件允许用户访问受保护的路由:
router.post("/api/userInfo",
blite.mid.authenticateUser, // passing authenticateUser middleware here
async (req, res) => {
if (res.error) {
return res.status(400).json(res.error);
}
res.json({
user: req.user,
message: "success"
});
});
上传中间件
您可以通过使用表单数据并通过以下方式从客户端向您的服务器发送发布请求来上传文件:
fetch("/api/upload", {
method: 'POST',
body: formData
})
然后你需要在服务器端定义上传路由并通过以下方式将中间件传递给它:
// server side
router.post("/api/upload",
blite.mid.decodeUpload, // passing decodeUpload middleware here
async (req, res) => {
if (res.error) {
return res.status(400).json(res.error);
}
const uploadedFile = req.files.upload.filepath;
// Do something with the file
res.json({
message: "File successfully uploaded."
});
});
数据库
Blite 使用 ControlDB 作为其数据库。它是一个简单快速的基于文档的数据库,将数据存储在 JSON 文件中。您可以在此处查看 ControlDB以获取更多详细信息。以下是如何将 ControlDB 与 Blite 结合使用的一些示例。
创建数据库
您可以通过传递带有数据库参数的配置对象来创建数据库。默认情况下,Blite 将创建一个名为“blite”的空数据库。也可以通过传递诸如集合名称、索引和唯一字段等选项来创建包含某些集合的数据库。
const config = {
...,
db: {
name: "myDatabase",
collections: [{ // You can either create collections here or you can create them later on
name: "users",
options: {
indices: [
"username"
],
unique: [
"username",
"email"
]
}
},
{
name: "posts",
options: {...}
}]
}
};
blite.init(config).start()
添加一个集合:
var users = blite.db.addCollection('users');
插入文件:
users.insert({
name: 'Odin',
age: 50,
address: 'Asgard'
});
// alternatively, insert array of documents
users.insert([{ name: 'Thor', age: 35}, { name: 'Loki', age: 30}]);
简单查找查询:
var results = users.find({ age: {'$gte': 35} });
var odin = users.findOne({ name:'Odin' });
简单的 where 查询:
var results = users.where(function(obj) {
return (obj.age >= 35);
});
简单链接:
var results = users.find({ age: {'$gte': 35} }).simplesort('name').docs();
简单的命名转换:
users.addTransform('progeny', [
{
type: 'find',
value: {
'age': {'$lte': 40}
}
}
]);
var results = users.chain('progeny').docs();
简单的动态视图:
var pview = users.addDynamicView('progeny');
pview.applyFind({
'age': {'$lte': 40}
});
pview.applySimpleSort('name');
var results = pview.docs();
有关详细信息,请在此处查看 ControlDB 文档
结论
Blite 是一个简单快速的框架,可让您在几分钟内创建一个完整的堆栈 Web 应用程序。它具有许多可用于构建下一个项目的功能。如果您有任何问题或建议,请随时与我联系。我希望你喜欢使用 Blite。