Sails.js自动化Api实践与测试

article/2025/9/14 18:23:42

开发中为了快速交互数据库,于是需要一个能便捷搭建api的平台。于是学习了一下sails.js框架。本次实践是一次摸索,使用了winston日志记录,supertest单元测试,mongo数据库,hashids哈希值解密。

模块: winston+supertest+mongo+hashids

一、准备工作

我为了方便,使用docker拉取了一个mongodb的容器,在其中新建了my_widget_db数据库以及一个jobdetails集合。

jobdetails中数据样例属性如下:

jobId: 300***42	
postingId: 1888***19	
hash: JKMNlw*********5Pt7VQA	
jonName: jobname1

安装日志模块以及加解密模块: 

npm install winston
npm install hasids

模块需要配置一下 ,在config/bootstrap.js文件中:

const winston = require("winston");
const Hashids = require("hashids");
module.exports.bootstrap = async function() {const logConfiguration = {'transports': [new winston.transports.Console()]};sails.logger = winston.createLogger(logConfiguration);sails.hashids = new Hashids("JrY1ofkGxnByuIcFh0mHmIF6ieJLkwpM");
};

二、Sails.js用法

Sails.js是MVC架构的一个api搭建框架,创建一个项目:

sails new project-name

 创建api命令,会生成一个controller文件和model文件(/api下的controller和model内):

sails generate api ApiName

 在app/api/controller/ApiNameController.js中实现响应请求的代码。

比如请求获取jobdetails数据:

const responseError = (res, message, code = 400) => {res.status(code)res.send({message})return res
}const keys = ['jobId', 'postingId', 'hash', 'jobName']// 检查数据完整性
const checkData = (data) => {let status = truekeys.forEach(key => {if (!data[key]) {status = false}})return status
}// 检查非空参数数量
const checkParameters = (data) => {let c = 0;keys.forEach((key) => {if (data.param(key)) {// console.log(data.param(key))c++;}})return c;
}module.exports = {// 实现响应函数 getDetails,用于查询数据库中的数据async getJobDetails(req, res) {try {// check the number of paramslet counter = checkParameters(req)// console.log('params: ', `${counter}`)if (counter < 1) {return res.serverError('At least one parameter must be provided!');}let queryObject = {}keys.forEach(key =>{if (req.param(key)) {queryObject[key] = req.param(key)}})// JobDetails是我的model名称var getRecord = await JobDetails.find(queryObject).sort('createdAt DESC').limit(1);if (!getRecord && getRecord !== "undefined") {sails.logger.log('error', `jobId(${jobId}) not found`);return res.notFound();} else {getRecord.map(value =>{if (value.hash) {value.hash = sails.hashids.decode(value.hash);}if (value.createdAt) {delete value.createdAt;}if (value.updatedAt) {delete value.updatedAt;}if (value.id){delete value.id}return value})return res.json({data: getRecord});}} catch (err) {sails.logger.log('error', JSON.stringify(err));return res.serverError(err);}},
}

配置一下model/api.js文件

module.exports = {attributes: {jobId: {type: 'string'},postingId: {type: 'string'},hash: {type: 'string'},jobName: {type: 'string'},},};

接着设定网络请求的映射路由,将请求地址映射为此action响应函数 ,其中关于路由写法:

/jobdetails/:jobId?:postingId?:hash?:jobName?

表示/jobdetails/地址接收可选的参数有四个,分别是jobId,postingId,hash,jobName

module.exports.routes = {"GET /jobdetails/:jobId?:postingId?:hash?:jobName?": {controller: "JobDetailsController",action: "getJobDetails",cors: {origin: "http://127.0.0.1:3333, http://localhost:3333",credentials: false}// swagger: {},},
}

 最后还需要配置一下数据库请求地址,我这里是docker容器,映射地址是

localhost:27018

因此进行如下设置,一般mongodb默认的地址是localhost:27017,为了避免冲突我重映射为了27018端口。

在/config/datastores.js文件中添加:

module.exports.datastores = {mongodbServer: {adapter: 'sails-mongo',url: 'mongodb://localhost:27018/my_widget_db',},
};

 三、接口测试

安装supertest模块,并在项目根目录下新建一个test文件夹:

npm install supertest

创建文件:/test/integration/controllers/ApiName.test.js


var supertest = require('supertest');
var sails = require('sails');
var assert = require('assert')describe('JobDetailsController', function () {[{'jobId':'300***42	'}].forEach( job =>{it(`getJobDetails ${job['jobID']}`, function (done) {let query = ''for(let k in job){query += '?' + kquery += '=' + job[k]}supertest(sails.hooks.http.app).get(`/jobdetails/${query}`).expect("Content-Type", /json/).expect(200).end(function (err, res) {if(res && res._body && res._body.data && res._body.data.length){return done()}else{return assert.ok(false,'There is no matching data in the database');}})})let data = []if(job['jobID']==='300***42	'){data = [{op:'add',path:'jobName',value:'jobnamehaschanged'}]}it(`patchJobDetails ${job['jobID']}`,function(done){supertest(sails.hooks.http.app).patch(`/jobdetails/${job['jobID']}`,data).expect("Content-Type", /json/).expect(200).end(function(err,res){if(res && res._body && res._body.length){return done()}else{return assert.ok(false,'There is no matching data in the database');//done(false)//done(new Error('There is no matching data in the database'))}})})})});

测试api: 

npm run test

Postman 上测试: 


http://chatgpt.dhexx.cn/article/NPstU6F4.shtml

相关文章

五、解读Sails之Waterline源代码

文章目录 sql调试代码跟踪package.json启动调试Auto-Migrating备份原始数据删除所有表再重建回写备份数据 加密库 encrypted-attraes-256-gcm算法encrypted-att 的使用密钥 sql转义 sqlstring日期处理三种方式比较mariaDB&#xff08;或my-sql&#xff09;中的日期时间string 对…

一、Sails基础操作

本篇目录 Sails 安装App结构修改端口跨域问题第一个Api控制器用Postman 做Api调试MySql命令行操作MySql8.0版本加密问题 Sails 操作Mysql创建第一个model实现一个model的增删改查 Sails 安装 Sailsjs提供安装脚手架&#xff0c;使用之前可以先安装Sailjs npm install sails -…

sails

sails介绍 node.js的MVC框架&#xff0c;完全继承Express&socket.io的一些API 使用 全局安装 npm install -g sails创建项目 sails new 项目名称选2 选2 启动项目 sails liftsails框架目录介绍 api MVC结构项目代码目录controller层controller层尽量只做数据封装&…

Sails基础之Models层的config/datastores配置

配置与使用 Sails提供并支持多种Models层的存储&#xff08;https://sailsjs.com/documentation/concepts/extending-sails/adapters/available-adapters&#xff09;&#xff0c; 使用时需要在应用程序项目下安装对应的adapter并且在config/datastores或config/env/productio…

Sails的简单学习

这里贴出Sails的官方 一.Sails的简单介绍 官网上说&#xff1a; The web framework of your dreams.你梦想中的web框架。 Sails让创建自定义、企业级的Node.js应用的工作变得简单。它模拟了大家熟悉的诸如Ruby on Rails这种框架的MVC设置模式&#xff0c;但是也拥有满足现代…

什么是Sails

Sails的关键字 Realtime MVC Framework for Node.js Node.js Sails采用纯粹的Node.js进行构建&#xff0c;你只需要掌握一门javascript编程语言就可以构建Sails应用程序&#xff08;Web程序&#xff09;&#xff1b; MVC Framework Sails提供了基于MVC结构组织Web程序的基础…

sublime插件anaconda的设置

在 python 编辑环境下&#xff0c;使用 anaconda 完成一些代码补全和提示 具体设置如下 {//由于Anaconda插件本身无法知道Python安装的路径&#xff0c;所以需要设置Python主程序的实际位置"python_interpreter": "../python.exe",//忽略各种空格不对, 超…

Sublime 插件安装

1、百度搜索 Sublime3&#xff0c;进入 Sublime3 官网下载安装文件 注意&#xff1a;不要走到 Sublime2 的官网去下载&#xff0c;也不要使用 Sublime 的其它中文汉化版本&#xff1b; 2、下载 github 的 Package Control 包&#xff0c;下载地址&#xff1a; https://githu…

Sublime插件安装

1.PackageControl 功能&#xff1a;安装包管理 简介&#xff1a;sublime插件控制台&#xff0c;提供添加、删除、禁用、查找插件等功能 使用&#xff1a;https://sublime.wbond.net/installation 安装方法&#xff1a; CTRL &#xff0c;出现控制台粘贴以下代码至控制台 …

解决sublime无法下载插件问题

解决sublime无法下载插件问题 最近遇到了无法在sublime下载插件的问题&#xff0c;解决方法如下。 首先下载一个文件&#xff0c;地址如下 https://pan.baidu.com/s/1OlC0q8MwiZ_cEbs56SIwzw&#xff0c;提取码为vef9 下载完成后将其解压 再放入sublime文件夹中 接着点开P…

mac sublime安装插件

sublime 安装插件 需要等待一会&#xff0c;在弹出的新窗口&#xff0c;输入要添加的插件的名称&#xff0c;选择确认就可以了 以 Pretty JSON 插件为例&#xff0c;在将json字符串粘贴到文件之后&#xff0c;使用&#xff1a; control command j 进行格式化 调用搜索栏 shi…

java开发sublime插件_开发者最常用的8款Sublime text 3插件

5. SublimeCodeIntel Sublime​Code​Intel 作为一个代码提示和补全插件&#xff0c;支持Javascript、Mason、XBL、XUL、RHTML、SCSS、python、HTML、Ruby、Python3、XML、Sass、XSLT、Django、HTML5、Perl、CSS、Twig、Less、Smarty、Node.js、Tcl、TemplateToolkit 和 PHP 等…

Sublime Text - SublimeREPL插件的配置

1. 菜单Preferences -> Browse Packages&#xff0c;打开安装组件所在的文件夹&#xff0c;进入文件夹Data\Packages\SublimeREPL\config\Python&#xff0c;打开文件Default.sublime-commands&#xff0c;复制如下代码 { "caption": "SublimeREPL: Pyth…

Sublime常用c语言插件

1. Alignment 按等号对齐&#xff0c;强迫症患者必备 Alignment&#xff1a;选中并按ctrlalta就可以使其按照等号对齐 2. 配色方案Enki或者earthbound 3.A file icon 文件图标 4.CoolFormat&#xff1a;C代码格式化 简单好用的代码格式化工具&#xff0c;相当于简化版的Astyl…

Salesforce开发工具Sublime插件(一)

Salesforce开发工具Sublime插件 1. 下载Sublime 3(这是最新) http://www.sublimetext.com/3 进行脑残试的安装方法,下一步即可. 2.装好后打开.exe 3.安装Package Control 这个东东是一个方便 Sublime text 管理插件的插件&#xff0c;这个强大&#xff0c;把它装上去了&#…

关于Sublime的下载与插件安装

Sublime的中文网http://www.sublimetext.cn/ 下载Sublime Sublime的中文网http://www.sublimetext.com/下载Sublime 下载完成 ctrlShiftp 输入install package,确定&#xff0c;此时等待再次出现搜索框&#xff0c;现在就可以下载插件了&#xff0c;现在直接搜索需要的插件名字…

sublime常用插件及安装方式介绍

Sublime Text 是一个文本编辑器&#xff08;收费软件&#xff0c;可以无限期试用&#xff09;&#xff0c;同时也是一个先进的代码编辑器。Sublime Text是由程序员Jon Skinner于2008年1月份所开发出来&#xff0c;它最初被设计为一个具有丰富扩展功能的Vim。 Sublime Text具有漂…

sublime 的插件安装

sublime 安装插件的方法有两种&#xff0c;一种是直接下载插件压缩包&#xff0c;放在browse packages 中 还有就是线上安装&#xff0c;就是本次要详细记讲的&#xff0c;写这篇文章主要为了记录下&#xff0c;下次方便查找 sublime的插件安装方法 插件安装&#xff1a;如果在…

Sublime插件安装与提高Verilog编写效率插件推荐

前言 相对于Vivado与Quartus自带的编辑器&#xff0c;使用Sublime可以提高Verilog的编写效率。Sublime是可以自己编写插件并使用的&#xff0c;合理的运用插件可以提高开发Verilog生产力。 一、插件安装 1.打开Sublime&#xff0c;点击【Preferences】、【Package Control】…

Sublime插件推荐

常用插件推荐 Alignment: 自动对齐代码 SublimeLinter 提示编写代码中存在的不规范和错误的写法 Sublime CodeIntel代码提示和补全 Bracket Highlighter代码匹配 SideBarEnhancements 侧栏右键功能增强 ConvertToUTF8,GBK编码兼容 Emmet让编写代码变得简单 HTML-CSS-…