NodeJS Rest Express MongoDB (REM) - a production-ready lightweight backend setup.
Live Demo (login with a test user: user1@example.com, user111 - inspect API calls to learn more)
cats and dogs
features:
Typescript Express CORS Helmet DotEnv joi (validation) forever
Mongoose Passport JWT Await
Tslint Apidoc Docker Husky Morgan Travis Unix/Mac/Win (Powershell)
Tests
Mocha Chai Sinon istanbul
MORE:
HTTPS HTTP2 (spdy) Socketio 2.1 Init DB Data
Slack message Nodemailer Mailgun Email Templates Forgot Password
VSCode Debug Dependabot Codacy File upload (multer)
API
API response (data, meta: limit, offset, sort) Transform res
apiJson Pagination query
Regex query Whitelist fields in response Populate deep fields
mstime API response time Stack trace in Response
UI Example
CRA, Typescript, React-router, Axios, PostCSS, Tailwind. Components: Login, Home, ItemView.
Portable-react
Require: MongoDB
and NodeJS v8.12.0 +
Clone this project:
git clone https://github.com/ngduc/node-rem.git your-app
cd your-app
rm -rf .git (remove this github repo's git settings)
yarn
package.json
and .env
file with your information.yarn dev
, it will create a new Mongo DB "node-rem"yarn test
can run all unit tests.curl -k -d '{"email": "example1@email.com", "password": "testpsw"}' -H "Content-Type: application/json" -X POST http://localhost:3009/api/v1/auth/register
- Start MongoDB first. Verify .env variables.
yarn dev launch DEV mode
yarn start launch PROD mode
yarn stop
yarn test Run tests (requires MongoDB)
- First, start the Backend with: yarn dev
- Then, start UI:
cd ./ui
yarn
yarn start (then open http://localhost:3000 - login with a test user: user1@example.com, user111)
Your simple API Route Handler
will have a nice syntax like this: (packed with
vitamins
cool stuffs)
exports.list = async (req: Request, res: Response, next: NextFunction) => {
try {
const data = (await User.list(req)).transform(req); // query & run userSchema.transform() for response
apiJson({ req, res, data, model: User }); // return standard API Response
} catch (e) {
next(e);
}
};
API Response is similar to JSON API standard:
GET http://localhost:3009/api/v1/users?fields=id,email&email=*user1* (get id & email only in response)
GET http://localhost:3009/api/v1/users?page=1&perPage=20 (query & pagination)
GET http://localhost:3009/api/v1/users?limit=5&offset=0&sort=email:desc,createdAt
{
"meta": {
"limit": 5,
"offset": 0,
"sort": {
"email": -1,
"createdAt": 1
},
"totalCount": 4,
"timer": 3.85,
"timerAvg": 5.62
},
"data": [
{
"id": "5bad07cdc099dfbe49ef69d7",
"name": "John Doe",
"email": "john.doe@gmail.com",
"role": "user",
"createdAt": "2018-09-27T16:39:41.498Z"
},
// more items...
]
}
Example of generated API Docs (using apidoc
) - https://node-rem.netlify.com
All contributions are welcome!
UI Example uses Portable-react
node_modules安装及node-sass使用 终端进入项目文件夹运行以下命令 一、安装node_modules 1、输入npm init,一直回车 会生成package.json文件 2、npm i -D vue 然后就成功node_modules了 二、使用node-sass 1、创建css文件 2、创建index.scss文件,写入样式 3、运行node-sass -w ./css/i
Vue搭建项目时候使用的node-sass(5.0.0) 和 sass-loader(10.1.0), 同事服务器安装部署打包时出现上述错误,目测为版本不兼容导致, 于是在node-sass Issues中找到了答案: 由于我本地使用node版本为12.0.1,服务器为较新的16.0.1,所以出现了兼容问题 解决方案: 一:升级node-sass到最新版本即可(在用方案) npm uninstal
背景 移动端设计稿一般是750px,如果没有用taro或者uniapp这类的框架,就需要自己来进行css的适配。 方案 一、Rem rem是相对于根元素html字体大小的一个css单位,默认情况下html的font-size=16px,所以1rem = 16px。可以动态设置html的字体大小,比如设置html的font-size=100px,那么1rem=100px。重点就是动态设置html字体
怎样转换静态文件 安装: npm install px-rem -g 然后跑下命令 px2rem 你也可以设置一个配置文件 px2rem --config pxrem.config.js config 默认 config: { patterns: "**/*.css", pxToRemRatio: 0.01, ignoreCss: [], isReplace: false, convertBord
npm i postcss-px2rem-exclude -D 链接:https://www.npmjs.com/package/postcss-px2rem-exclude .postcssrc.js module.exports = { 'plugins': { 'postcss-px2rem-exclude': { remUnit: 75, prop
第一步 安装 lib-flexible npm i lib-flexible --save 第二步 安装 px2rem-loader npm install px2rem-loader --save-dev 第三步 配置utils.js文件 添加到cssLoaders方法中 css-loader const cssLoader = { // loader: 'css-loader',
安装lib-flexible 和 postcss-pxtorem 安装 npm install lib-flexible --save 或 yarn add lib-flexible --save npm install postcss postcss-pxtorem --save-dev 或 yarn add postcss postcss-pxtorem --save-dev 在mai
最近接了个需求,以前做的pc端的项目要适配,如果适配的话,有两种方案: 媒体查询:麻烦 rem: 更麻烦 **方案:** 所以选择插件 postcss-pxtorem,但是这个插件只能转换css文件中的样式,不能转换行内样式。行内样式要特殊处理,这里的方案就是自定义loader在webpack编译时通过正则拿出px,并通过计算转换。 1.npm install postcss-pxtorem -
1.安装插件 (1)安装px2rem-loader(devDependencies) npm install px2rem-loader --save-dev (2)移动端适配解决npm包 "lib-flexible" (dependencies) npm install lib-flexible --save (3)main.js中引入 "lib-flexible" import 'lib-
如何在vue-cli3.0中使用postcss-plugin-px2rem 插件 插件的作用是 自动将vue项目中的px转换为rem 。 为什么这三个中要推荐 postcss-plugin-px2rem呢? 因为 postcss-plugin-px2rem 这个插件 配置选项上有 exclude 属性,它可以配置 是否对 某个文件夹下的所有css文件不进行从px到rem的转换。 所以我们可以利用这
Node是kubernetes集群的工作节点,可以是物理机也可以是虚拟机。 Node的状态 Node包括如下状态信息: Address HostName:可以被kubelet中的--hostname-override参数替代。 ExternalIP:可以被集群外部路由到的IP地址。 InternalIP:集群内部使用的IP,集群外部无法访问。 Condition OutOfDisk:磁盘空间不足时
node 负责 peer node 子命令。
这用于确定进程需要运行的节点的值。 由于分布式编程用于在不同节点上运行函数,因此在希望在不同机器上运行程序时,此功能非常有用。 语法 (Syntax) node() 参数 (Parameters) None 返回值 (Return Value) 这将返回本地节点的名称。 如果节点未分发,则返回nonode@nohost 。 例如 (For example) -module(helloworld)
The Po.et Node The Po.et Node allows you to timestamp documents in a decentralized manner. It's built on top of the Bitcoin blockchain and IPFS. Index The Po.et Node Index How to Run the Po.et Node De
Node-Lua是一款基于Lua实现的脚本和服务器引擎,它支持构建海量Lua服务(Context_Lua)并以多线程方式运行在多核服务器上,采用了任务多路复用的设计方案,有效利用了多核优势。node-lua致力于构建一个快速、简单易用的Lua脚本和服务器开发和运行环境。该引擎参考了Node-Js和Skynet的设计思想,并对其进行了整合和优化。 该引擎当前版本实现了以下特性: 引擎核心层同时支持同
在程序里经常都需要生成一些特定格式的 id ,每种场合的需求都可能有些不一样,虽然写起来代码不复杂,但零零碎碎的东西做多了也挺烦的,于是设计了这个用于 node.js 的万能 ID 生成器。 AnyID 生成的 ID 为字符串(也可以纯数字),信息密度尽可能的高,也就是用最少的位数表示尽量多的信息。 AnyID 设计的首要考虑原则是 API 的直观易用。看看这些例子: 指定长度,随机值填充 21