基于Node.js平台mongoDB开发——mongoskin(by vczero)

node.js简单爬虫 可以作为node.js写爬虫的入门例子,代码也很单纯,http请求用superagent包实现,服务器端传回的json数据用cheerio包实现,无数据库代码。 立即下载
一、废话
从13年1月份接触mongodb进行开发,开发了旅游标签服务、微博标签检索系统、地图服务、web APP服务...使用MongoDB的场景从.NET、JAVA环境转到了node.js平台。越发觉Node.js和mongodb结合感觉的很好。感觉mongodb和node.js是天生的一对。的确,mongodb的客户端是JS的解析引擎。因此,选择mongodb和node.js做产品原型也是很nice的选择。网上,遇到网友询问mongodb的开发,选择哪个driver最好,以前一直是使用原生的driver,但是写起来代码有很多需要注意的,比如连接的关闭操作等等...因此,在node.js开发环境下我这里推荐使用mongoskin。
%26nbsp;
二、几个需要说的概念
(1)数据库:同关系数据库一样。
(2)集合: 关系数据库中的表。
(3)文档: 类比关系数据库的记录,实则是JSON对象。
(4)数据库设计:建议考虑NoSQL设计,抛弃关系数据的设计思想;其实NoSQL数据库设计博大精深,需要不断地在项目中实践。
(5)用户体系:每一个数据库都有自己的管理员,可以use dbname; db.addUser('root_1' , 'test');
(7)建议更改对外端口
(8)启动服务(这是win下,linux下稍作修改):
%26nbsp; %26nbsp; %26nbsp; %26nbsp; %26nbsp;mongod --dbpath "XX\MongoDB\data\db" --logpath "XX\MongoDB\log\mongo.log" --logappend -auth --port 7868
%26nbsp;
三、搭建mongodb开发基础设施
(0) npm install mongoskin 安装mongoskin
%26nbsp; %26nbsp; %26nbsp; %26nbsp; %26nbsp; %26nbsp;这里不介绍Node.js安装、package等机制。
(1)创建配置文件 config.json
  
{
    "dbname":"TEST",
    "port": "7868",
    "host": "127.0.0.1",
    "username": "test",
    "password": "test"
}
(2)创建util相关类mongo.js :导出一个DB对象
 1 var mongoskin = require('mongoskin'),
 2     config = require('./../config.json');
 3 
 4 /*
 5  * @des:导出数据库连接模块
 6  * */
 7 module.exports = (function(){
 8     var host = config.host,
 9         port = config.port,
10         dbName = config.dbname,
11         userName = config.username,
12         password = config.password,
13         str = 'mongodb://' + userName + ':' + password + '@' + host +':' + port+ '/' + dbName;
14 
15     var option = {
16         native_parser: true
17     };
18 
19     return mongoskin.db(str, option);
20 })();

(3)构建CRUD的基础类:为了减少重复CURD代码,只需要传入相关的JSON对象即可

var db = require('./mongo.js'),
    status = require('./status'),
    mongoskin = require('mongoskin');


var CRUD = function(collection){
    this.collection = collection;
    db.bind(this.collection);
};

CRUD.prototype = {
    /*
    * @des: 创建一条记录
    * @model: 插入的记录,JSON格式的model
    * @callback:回调,返回插入成功的记录或者失败信息
    *
    * */
    create: function(model, callback){
        db[this.collection].save(model, function(err, item){
            if(err) {
                return callback(status.fail);
            }
            item.status = status.success.status;
            item.message = status.success.message;
            return callback(item);
        });
    },

    /*
    * @des:读取一条记录
    * @query:查询条件,Mongo查询的JSON字面量
    * @callback:回调,返回符合要求的记录或者失败信息
    *
    * */
    read: function(query, callback){
        db[this.collection].find(query).toArray(function(err, items){
            if(err){
                return callback(status.fail);
            }
            var obj = {
                status: status.success.status,
                message: status.success.message,
                items: items
            };

            return callback(obj);
        });
    },
    /*
    * @des:更新一条记录
    * @query:查询条件,Mongo查询的JSON字面量,此处为_id
    * @updateModel:需要更新的JSON格式的模型
    * @callback:返回成功或者失败信息
    *
    * */
    update: function(query, updateModel, callback){
        var set = {set: updateModel};
        db[this.collection].update(query, set, function(err){
            if(err){
                return callback(status.fail);
            }else{
                return callback(status.success);
            }
        });
    },

    /*
    * @des:删除一条记录
    * @query:查询条件,Mongo查询的JSON字面量
    * @callback:返回失败或者成功的信息
    *
    * */
    deleteData: function(query, callback){
        db[this.collection].remove(query, function(err){
            if(err){
                return callback(status.fail);
            }
            return callback(status.success);
        });
    }
};


module.exports = CRUD;

(4)构建status.json,因为需要一些状态表示成功和失败,后期可以拓展为验证码错误、短信验证错误、用户名错误等

module.exports = {
    /*
    * 成功状态
    *
    * */
    success: {
        status: 1,
        message: 'OK'
    },

    /*
    * 失败状态
    *
    * */
    fail: {
        status: 0,
        message: 'FAIL'
    },

    /*
    * 两次输入的密码不一致
    * */
    repeatPassword: {
        status: 0,
        message: '两次输入的密码不一致'
    }
 };

四、使用CRUD插入一条数据

var user = {
    username: '山鬼谣',
    password:  'sgAGHAHSWJWH(已经md5后)'
};

crud.create(user, function(data){
            if (data.status) {
                return res.send(status.success);
            }
            return res.send(status.fail);
 });

%26nbsp;

%26nbsp;
Git下载安装及环境配置,解决安装包下载慢问题(详细版) Git是我们平时开发都要用到的项目管理工具,虽然有网页版的Git网站,但是在本地安装Git后,可以直接使用命令语句来进行项目的上传与克隆。还是非常方便的。今天就来介绍下Git的下载。1、首先在浏览器中搜索Git,进入到Git的官方下载界面或者直接复制下面这个链接。 2、点击download进入下载界面,选择自己需要平台的文件 3、下载标准版就可以4、但是会发现下载速度很慢,就找个镜像版 5、点击 https://registry.npmmirror.com/binary.html?path=git-for- 阅读详情

相关推荐

NC65实现Restful接口开发及调试

NC65实现Restful接口开发及调试

linzhongshu的专栏 2146

claude-agents-library版本演进与路线图:从v1.0到v1.2,看34个AI Agent库如何持续进化

**claude-agents-library** 是一个精选的开源 AI Agent 配置库,包含 34 个可直接投产的 Claude Agent,覆盖 7 大专业领域。本文带你回顾它的版本演进历程:从 v1.0 的完整 Agent 阵容,到 v1.2 的 MCP 集成与成本优化,看看这个 AI Agent 库是如何一步步从"能用"进化到"好用、省钱、好选"的。 ## v1.0(2025年11

gitblog_00025的博客 408

WPF窗口定位技巧:从基础到高级的三种实现方法

本文详细解析WPF窗口定位的三种核心方法:屏幕居中(CenterScreen)、父窗口居中(CenterOwner)和手动定位(Manual)。通过对比其适用场景、实现代码与注意事项,帮助开发者根据实际需求选择最佳方案,从而提升WPF应用程序的用户体验与专业度。

weixin_29224309的博客 274

Open Interpreter + Ollama 本地部署三步指南

你手头有一份含客户数据的 CSV,不能发给第三方 API。你要的是一套 Open Interpreter 本地部署方案:让 Ollama 在自己机器上跑模型,Open Interpreter 负责执行代码,数据全程留在本机。下面三步跑通它。 ## 跑通之前的三件事 先摸下底:内存 8GB 起步(8B 模型约需 6GB),推荐 16GB;磁盘留 10GB;Windows、macOS、Linux

gitblog_00313的博客 591

EtherCat 从站开发中遇到的问题分享

EtherCat从站 AX58100

yu_arius的博客 2061

抖音小程序开发 唤起收银台支付(可以选择支付宝APP支付或微信H5支付)

什么都别说,先看效果: 字节跳动也开放了小程序给商家接入,可以在旗下APP如抖音、今日头条、今日头条极速版等应用中即点即用,基于庞大的数亿用户量为其引流,帮助商家获取用户流量,销售商品,其模式和微信小程序差不多。 1、后台管理地址: https://developer.toutiao.com/ 2、开发文档地址: https://developer.toutiao.com/dev/cn/min...

悟空码字的博客 1万+

Egg 日志体系全解:内置企业级 Logger 的路径、级别、切割与自定义实践

日志是 Web 开发中监控应用运行状态、定位线上问题的基础设施。Egg 框架内置了由 `egg-logger` 模块提供支持的企业级日志能力,涵盖日志分级、统一错误日志、启动日志与运行日志分离、自定义日志、多进程日志、自动切割与高性能写入等完整特性。本文以官方文档 [core/logger.md](https://link.gitcode.com/i/d460de1e911f8021d42c0e8

gitblog_00376的博客 922

Netapp FAS2750热备盘替换失败问题分析与解决

本文深入分析了Netapp FAS2750存储系统中热备盘替换失败的故障现象,揭示了磁盘分区属主不匹配导致数据同步无法启动的根本原因。通过详细的排查步骤和解决方案,帮助运维人员快速恢复aggr状态,并提供了长期预防措施和最佳实践建议,确保存储系统的高可用性。

weixin_33737774的博客 401

mongodb BuiderUpdateModel

开发效率,IDE相关视频讲解:Python性能这么差,为什么会在AI中大量使用C语言程序设计入门之环境安装MongoDB BuilderUpdateModel 详解 在MongoDB中,更新文档是一项非常常见的操作。而在进行更新操作时,我们经常会使用到BuilderUpdateModel类。BuilderUpdateM...

weixin_40589671的博客 182

PINN驱动的3D不可压缩流场重建——从稀疏2D2C观测到完整物理场反演——含源码实现

多尺度融合策略在此发挥作用:高分辨率的2D2C数据用于约束平面内的精细结构,而低分辨率的3D3C数据提供第三维度的粗尺度信息。迁移学习架构在此发挥关键作用。这种策略在湍流封闭模型构建中尤为有效,其中RANS提供的平均流场与DNS的雷诺应力数据融合,显著提升了分离流的预测精度。在稀疏数据场景下,注意力权重根据观测数据的分布动态调整,强化数据缺失区域的物理约束,同时避免过拟合于观测点。这种机制与自适应采样的结合,实现了计算效率与重建精度的平衡,在仅保留约百分之十关键节点的情况下,仍能保持高物理一致性。

u012133341的博客 138

nuScenes数据集详细介绍

nuScenes网上介绍资料较多,但是大部分仅仅是对官网的翻译,缺乏各个文件的内在联系介绍。例如,nuScenes激光雷达的数据格式,点云包含哪几种属性。再比如,sample文件夹和sweeps文件夹下的文件关系,以及是如何在相关json文件中体现的。本文将详细介绍nuScenes数据集的各个部分。

叶子的博客 1万+

第5章-MongoDB、Mongoskin特性-5.5.Mongoskin的主要方法介绍

Mongoskin比MongoDB的原生驱动提供更好的API。像之前那样,在NPM上安装一个模块$npm install mongoskin@0.6.1和数据库的连接var mongoskin = require('mongoskin'), dbHost = '127.0.0.1', dbPort = 27017;var db = mongoskin.db(dbHost + ':' + db

深情小建 1007

Unity之OpenXR+XR Interaction Toolkit实现 VR控制第一人称角色模型动画

我们在开发VR项目时,有时会有第一人称视角的需求,即我们自己带上VR头显,能够看到自己的身体,如果模拟一些人物触电死亡,使用工具动画之类的需求,那么VR控制第一人称视角就比较实用了。我们今天就来介绍一下如何实现VR设备控制第一人称:1.角色手部跟随手柄移动和旋转2.角色头部跟随VR头显转动和移动3.角色腿部跟随角色头显移动和下蹲。

TxNet 2845

mongoskin学习总结

在node.js环境下使用mongoskin 操作mongoDB . mongoskin 的安装非常简单 npm install mongoskin mongoskin 的使用,上一篇博文已经说过,你可以返回去瞄一眼, 我是伟大的传送带 下面的内容针对 mongoskin 操作 mongoDB 的api来说明: 查 这应该是所有数据库的灵魂,通过简单的

taoerchun的专栏 1704

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

node js 使用mongoskin 操作mongodb

安装 mongoskin方法很简单  在cmd中,进入nodejs目录,输入 npm install mongoskin回车即可安装成功 获取db var mongoskin = require('mongoskin'); var str = 'mongodb://' // + userName + ':' + password + '@' +'127.0.0.1' +':' +

s13488941815的专栏 1832

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

mongoskin封装mongdo驱动的调用方式

最近在看MEAN框架,在学习过程中想对mongoskin接口再进行一次封装,实现的目标:是数据库连接信息写入配置文件,在实调用过程中不涉及数据库的打开和关闭等操作,具体的封装接口在后续的文章中呈现。封装接口就会涉及到对原接口的了解,但是mongoskin接口的文档又不是很完善,因此就需要对mongodb接口的了解。         先说一下,本文使用的mongoskin的版本号是1.4.13,大

江淮猫 972

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

基于Node.js开发个性化全网内容抓取平台

百度云网盘下载【课程内容】00课前预习内容01 搭建http服务02 Express基础03 Express中的MVC04 MongoDB实操05 mongoose06 Node.js异步最佳实践07 错误处理和日志08 鉴权09 爬虫系统初步10 鉴权实战和爬虫实战111 Redis+爬虫实战12 使用pm2管理爬虫进程13 推荐系统初步14 微服务初步和实战15 在AWS部署服务16 推荐系统...

xinjinghe的博客 619

基于MongoSkin的Promise风格的NodeJS读写MongoDB

Promise是一种异步编程的代码书写方式,和Async模块一样,都能提高代码的可读性和可维护性。Async封装的比Promise要好,但是灵活性特别是彻底的去CallBack化会比Promise要差一点。下面直接贴下源代码,注释很详细: (1)数据库连接文件:dbConfig /** * Created by apple on 2014/12/29. */ var mongoskin

某熊的技术之路 2672

nodejs+express+mongodb安装

本文是在64为win7系统在进行的,linux环境大家可以类似操作。 1.nodejs安装   到nodejs官网下载安装包,按照默认配置点击下一步操作即可。nodejs官网https://nodejs.org/,本文安装的版本是0.12.7。 2.express安装   a.执行命令:npm install express-generator -g,会自动安装express应用生成器。

江淮猫 1266

node将图片转换成html文件,GitHub - vczero/image-vector: 将图片转化为矢量并canvas化的简单工具(基于Node.js + HTML5 canvas)...

image-vector将图片转化为矢量并canvas化的简单工具(基于Node.js + HTML5 canvas)###一、矢量化的方案现有情况下,矢量化的方案主要有两种(这里只针对canvas):1、基于要素图层的矢量,这也是大多数情况下的矢量,这样可以很好做拓扑关系;2、基于描述性的矢量,就是没有图层关系,只是表明坐标点范围内是什么颜色的地块。###二、如何选择基于图层要素的矢量,可以很好...

weixin_35880116的博客 1230

[慕课笔记] node+mongodb建站攻略

如何利用node+mongodb来快速搭建一个电影网站?一:后端部分整个网站的后端是由node.js来驱动的,所以在后端需要安装node.js,以及在这个基础之上的框架express,它能够帮助我快速的搭建web应用,然后数据库选用的mongodb,以及对mongodb快速建模的工具mongoose。后端的模板引擎用的是jade关于时间个日期的格式化选用的...

祈澈菇凉 598

nodejs+mongoskin操作mongo

var db = require('mongoskin').db('mongodb://localhost:27017/testdb'); /** db.collection('task').find().toArray(function(err,result){     if(err){         console.log(err);     }    // console.lo

IT藏经阁:收集各种精华帖 998
上一篇: 利用DAC(Data-tier Application)实现数据库结构迁移
下一篇: Linux基本命令之date命令
lin91o7c
博客等级 码龄12年 1粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值