使用express框架+mongodb快速搭建后端项目

news2024/11/28 23:49:47

首先node环境不用多说

然后我们使用express脚手架 express-generator

快速创建项目目录

全局安装express-generator

npm i -g express-generator
复制代码

接着使用express命令创建项目, programnem是你的项目文件夹名

express <programname>
复制代码

然后我们就有了一个完整的express项目目录,进入到项目文件夹->

## 安装依赖
npm install

## 运行项目
npm run start
复制代码

浏览器输入localhost:3000,可以看到如下界面

但是我们发现,如果我们修改了一下文件,页面并不会发生改变,必要要重新npm start一下才行,这是因为,start不是热更新。

这时候我们可以安装nodemon依赖,使用nodemon来运行我们的服务

安装nodemon,并使用

npm i -S nodemon
复制代码

打开package.json

旧代码
"scripts": {
  "start": "node ./bin/www"
},

新代码"scripts": {
  "dev": "nodemon ./bin/www",
  "start": "node ./bin/www"
},

增加了 ——> "dev": "nodemon ./bin/www",
复制代码

此时我们运行  

npm run dev
复制代码

发现修改代码后,页面内容会发生改变了,不需要在重新运行了。

上面说的这么多,发现有点啰嗦了,但是我想尽可能的说的清楚一些。

接下来我要加快速度了。

目录结构修改

我喜欢将routes文件夹放在一个单独的src文件夹下面,在src下面一般我还会建一些其他的文件夹,如下图

对比一下,我还在外面新建了config文件夹,存放公共配置,比如jwt 的签名,小程序登录的appid和秘钥等等。

安装并使用mongodb数据库

以上是目录结构建完了,接下来是数据库链接,模型操作

安装mongoose依赖
npm i -S mongoose
复制代码

在db文件夹下,新建mongodb.js

// 引入 mongoose 
const mongoose = require('mongoose')

// 连接数据库,自动新建 ExpressApi 库
mongoose.connect('mongodb://localhost:27017/ExpressApi', {
  useNewUrlParser: true, // 避免“不建议使用当前URL字符串解析器”
  useCreateIndex: true, // 解决MongoDB弃用警告
  useUnifiedTopology: true, // 解决连接报错问题
  useFindAndModify: false
})

module.exports = mongoose
复制代码

接着我们在model文件夹下新建一个模型文件,比如User.js

这里建议模型文件用大驼峰命名

User.js

// 引入mongodb
const mongoose = require('../db/mongodb')
const bcrypt = require('bcrypt')
// 建立用户表
const UserSchema = new mongoose.Schema({
    username: {
        type: String,
        unique: true
    },
    password: {
        type: String,
        set(val){
            return bcrypt.hashSync(val, 10)
        },
        select: false
    },
    createTime: {
        type: Date,
        default: Date.now
    },
    updateTime: {
        type: Date,
        default: Date.now
    }
})

// 建立用户数据库模型
const User = mongoose.model('User', UserSchema)
module.exports = { User }
复制代码

最基本的用户模型一般包括用户名和密码,以及创建时间,更新时间,

这里还使用了bcrypt 密码加密  

npm i -S bcrypt
复制代码

数据库模型创建好以后,我们在路由中就可以使用了

比如我们在 routes/users.js中使用

var express = require('express');
var router = express.Router();
const { User } = require('../model/User')

// 用户注册
router.post('/register', async (req, res, next) => {
  const user = await User.create({
    username: req.body.username,
    password: req.body.password
 }) 
 res.send(user)
});

// 获取用户信息
router.get('/info', async (req, res, next) => {
  const user = await User.findOne({
    _id: req.user_id  })
  res.send({
    code: 200,
    data: user
  })
})

// 获取用户列表
router.get('/list', async(req, res, next)=>{
  const user = await User.find()
  res.send({ 
   code: 200,
    msg: '获取成功',
    data: user
  })
})

module.exports = router;
复制代码

以上就是简单的mongodb数据库的使用

为了验证我们的代码确实有效果,我们可以使用接口调试工具,进行测试

这里我使用了vscode的插件REST Client进行测试,

vscode搜索插件REST Client 并安装

然后再项目的根目录下新建.http文件

// test.http@url=http://localhost:3000

### 获取用户列表
get {{url}}/users/list

### 注册账号
POST {{url}}/users/register
Content-Type: application/json

{
  "username": "user3",
  "password": "123456"
}
复制代码

以上我们就有了一个简单的基于express+mongodb搭建的基础项目了,这里只举例了增加和查询的数据库操作。

后续的开发,其实就是实现业务功能的code了,其实还是比较简单的,不会的也可以去百度一下,网上相关的教程也是很多的。

作者:禅yi下
链接:https://juejin.cn/post/6931253375195414535
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/470669.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023五一数学建模竞赛(五一赛)选题建议

提示&#xff1a;DS C君认为的难度&#xff1a;C<A<B&#xff0c;开放度&#xff1a;B<A<C 。 A题&#xff1a;无人机定点投放问题 这道题是传统的物理类题目&#xff0c;基本每次建模竞赛都会有。由于这道题目并未给明数据&#xff0c;所以数据获取和搜集资料是…

文件共享服务

~ 创建用户目录共享文件夹 ~ 本地目录为&#xff1a;d:/share\users&#xff0c;允许所有域用户可读可写。在本目录下为所有用户据添加一个以名称命名的文件夹&#xff0c;该文件夹将设置为所有域用户的home目录&#xff0c;用户登录计算机成功后&#xff0c;自动映射改在到H卷…

智尚转债上市价格预测

智尚转债 基本信息 转债名称&#xff1a;智尚转债&#xff0c;评级&#xff1a;AA-&#xff0c;发行规模&#xff1a;6.9958亿元。 正股名称&#xff1a;南山智尚&#xff0c;今日收盘价&#xff1a;11.49元&#xff0c;转股价格&#xff1a;12.33元。 当前转股价值 转债面值 …

R语言 | 因子

目录 一、使用factor()函数或as.factor()函数建立因子 二、指定缺失的Levels值 三、labels参数 四、因子的转换 五、数值型因子转换时常见的错误 六、再看levels参数 七、有序因子 八、table()函数 九、认识系统内建的数据集 在类别数据中&#xff0c;有些数据是可以排序…

适用于Windows PC和Mac的最佳录屏软件Camtasia2023强悍来袭

Camtasia2023是一款屏幕录制和视频剪辑软件&#xff0c;教授课程&#xff0c;培训他人&#xff0c;以更快的速度和更吸引人的方式进行沟通和屏幕分享。使您在Windows和Mac上进行录屏和剪辑创作专业外观的视频变得更为简单。 让您用更短的时间创作更多的视频。无需任何经验&…

继富士康之后,又一个8万人大厂转移印度,但仍在中国留有后路

日前消息指和硕旗下的昌硕工厂正在搬迁&#xff0c;预计将全数搬迁至印度&#xff0c;这是苹果代工厂之中又一家跟随苹果的脚步转移至印度&#xff0c;那么印度制造真的靠谱么&#xff1f; 苹果推动代工厂向印度转移似乎已是坚定不移&#xff0c;它最先推动纬创远赴印度设厂&am…

【Redis16】Redis进阶:内存优化

Redis进阶&#xff1a;内存优化 在基础学习的最后一篇&#xff0c;我们了解到了 Redis 的底层数据类型可以通过 OBJECT ENCODING 来进行查看。也了解过一些关于这些底层数据类型的知识。今天&#xff0c;我们就来更加深入的学习一下这些底层的数据类型&#xff0c;并据此来了解…

Opera 推出 Opera One,将取代 Opera 浏览器

Opera 日前推出了一款名为 Opera One 的新浏览器&#xff0c;该浏览器正处于开发者预览阶段&#xff0c;用户可以访问官网下载试用(链接)。这个浏览器的终极目标是在今年晚些时候取代其当家的 Opera 浏览器。 Opera One 遵循 "模块化设计理念"&#xff0c;并使用新的…

杭州云降价只是敲锣

1. 陈年旧事 大约是2015年&#xff0c;某友商宣布存储免费&#xff0c;当时我们公司如临大敌&#xff0c;我也被拽过去开会。后来我们才发现……对方的套路是&#xff1a; 文件存储原始收费是一毛钱。文档存储免费的条件是&#xff0c;需要客户当月有一次下载文件的行为才能免费…

不要随便给猎头简历!不沟通就瞎投简历,毁了金三银四的大厂面试!

许多人找工作时都会通过猎头&#xff0c;那么猎头到底是帮大忙还是帮倒忙呢&#xff1f; 一位网友提示大家&#xff1a; 不要随便给猎头简历&#xff01;金三银四的这一轮大厂面试彻底被一个猎头搅了&#xff0c;不沟通就瞎投简历&#xff0c;还美其名曰帮忙安排合适的岗位。 许…

从软件哲学角度谈 Amazon SageMaker

如果你喜欢哲学并且你是一个 IT 从业者&#xff0c;那么你很可能对软件哲学感兴趣&#xff0c;你能发现存在于软件领域的哲学之美。本文我们就从软件哲学的角度来了解一下亚马逊云科技的拳头级产品 Amazon SageMaker&#xff0c;有两个出发点&#xff1a;一是 SageMaker 本身设…

15天学习MySQL计划-锁(进阶篇)-第十天

15天学习MySQL计划-锁&#xff08;进阶篇&#xff09;-第十天 锁 1.概述 1.介绍 ​ 锁是计算机协调多个进程或线程并发访问某个资源的机制。数据库中&#xff0c;除传统的计算资源&#xff08;cpu&#xff0c;ram&#xff0c;i/o&#xff09;的争用以外&#xff0c;数据也是…

java实现NER模型识别问题中的实体

代码如下&#xff1a; String question "飞毛腿hw4x精品电池适用于哪些机型&#xff1f;";//1、NER模型识别问题中的实体List<String> list1 com.colorbin.rpa.c_magic_ai.c02_nlp.nlpUtil.getPerson(new String[]{question});List<String> list2 co…

完整数据分析体系概述

一、建设的出发点 满足业务需求&#xff0c;是建设数据分析体系的出发点&#xff0c;也是最终目的和最高要求。要注意的是&#xff0c;“业务需求”并没有统一的标准。不同部门&#xff0c;不同身份的人&#xff0c;需求是不一样的。从大的方面看&#xff0c;可以分作三个层级…

用户界面对象的线程亲缘性第一篇: 窗口

不同的对象具有不同的线程亲缘性规则&#xff0c;但其基本原则来自古老的 16 位 Windows。 在 Windows 系统上&#xff0c;最重要的用户界面对象当然是窗口了。窗口对象有它自己的线程亲缘性。创建窗口的线程是与窗口具有不可分割关系的线程。非正式地说&#xff0c;线程”拥有…

Pytorch激活函数最全汇总

为了更清晰地学习Pytorch中的激活函数&#xff0c;并对比它们之间的不同&#xff0c;这里对最新版本的Pytorch中的激活函数进行了汇总&#xff0c;主要介绍激活函数的公式、图像以及使用方法&#xff0c;具体细节可查看官方文档。 目录 1、ELU 2、Hardshrink 3、Hardsigmoid…

分屏视图上线,详情数据秒切换

分屏视图 路径 表单 >> 表单设计 功能简介 新增「分屏视图」。分屏视图是一种对数据阅读提供沉浸式体验的视图组织形式&#xff0c;用户可通过分屏视图更快速的查看数据详情。 使用场景&#xff1a; 对于数据类型是「订单」数据的表单&#xff0c;管理人员往往会对…

pandas的使用

Pandas 的使用 **介绍:**pandas 是 python 语言的的一个关于数据分析的扩展库&#xff1b;pandas 可以对各种数据进行操作, pandas 依赖于 numpy &#xff0c;在常规的数据分析中&#xff0c;pandas 的使用范围是最宽广的; 参考文章:https://www.runoob.com/pandas/pandas-tu…

VScode安装问题

1、编译运行的时候会产生正在启动生成… D:\install\vscode\vscode&MinGW\x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0\mingw64\bin\gcc.exe -fdiagnostics-coloralways -g D:\install\vscode\Folder\hello.c -o D:\install\vscode\Folder\hello.exe ‘D:\install\vscode\…

服务端实时推送技术之SSE(Server-Send Events)

文章目录 前言一、解决方案&#xff1a;1、传统实时处理方案&#xff1a;2、HTML5 标准引入的实时处理方案&#xff1a;3、第三方推送&#xff1a; 二、SSE&#xff1a;1、客户端&#xff1a;2、服务端&#xff1a; 三、业务实践&#xff1a;总结&#xff1a; 前言 服务端推送…