【零基础】手把手教你用Node搭建服务器并连接MongoDB数据库_使用node搭建服务器和数据库-程序员宅基地

技术标签: node.js  新星计划十篇文  新星计划  # NodeJS-ExpressAPI学习与使用  mongodb  

本文原创为CSDN博主:安之ccy,博客首页地址:https://blog.csdn.net/qq_43523725
转载请注明出处,谢谢支持和鼓励

在这里插入图片描述


正文bgm起~

用Node搭建服务器

创建MongoDB数据库
       创建项目
       配置项目
              新建集群
              创建一个新的数据库用户
              在允许访问列表中添加IP地址
              数据库连接自己的集群

Node连接MongoDB数据库

用Node搭建服务器

1.新建一个文件夹,放置项目,打开终端,进入这个目录,安装相关依赖:
npm init

我是一路回车的,入口文件默认为index.js,
在这里插入图片描述

init结束后会自动生成一个package.json文件,里面是刚刚(默认)设置的信息

{
    
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

2.安装express模块:

npm install express

此时的package.json文件是这样的:
在这里插入图片描述

3.创建入口文件,命名为index.js
创建新文件方式之一:
在这里插入图片描述

4.在index.js中搭建服务器:

// 1.引入express
const express = require("express");

// 2.创建app对象
const app = express();

// 3.设置端口
const port = process.env.PORT || 5000;

// 4.设置监听
app.listen(port, ()=>{
    
    console.log(`server running on port ${
      port}`);
})

// 5.设置路由
app.get('/',(req,res)=>{
    
    res.send("hello world");
})

5.运行项目:

node index.js

运行成功时,监听开启,并在终端输出如下信息:server running on port 5000
在这里插入图片描述
6.在浏览器可以看到"hello world"字样(在步骤——”设置路由“中定义的):
在这里插入图片描述

但是这样启动,每次代码发生改动保存后,需要手动重启一下项目,比较麻烦,可以使用nodemon自动保存重启项目
7.设置自动刷新重启项目:
安装nodemon:

npm install nodemon -g

使用nodemon启动项目:

nodemon index.js // 如果项目内容发生改变,会自动刷新并重启项目

项目运行成功之后,会在终端看到这样的信息:
在这里插入图片描述

8.设置启动/自动保存重启的快捷命令:
在package.json文件中的scripts字段下:

  • “start”:“node index.js” —— 在终端输入:npm run start即可启动项目
  • “server”:“nodemon index.js” —— 在终端输入:npm run server即可通过nodemon启动项目
 "scripts": {
    
   "start": "node index.js",
   "server":"nodemon index.js"
 }

至此,服务器就搭建好啦( •̀ ω •́ )✧~
在这里插入图片描述
      此处记录一个小坑,有的时候修改的代码不能及时更新,及时重启服务器也不行,需要把终端整个关掉再运行一次。emm,心肌梗塞的感觉。如果实在检查不出错误,不妨试一试,两试两灵,因此记录一下




然后我们来配置mongo数据库~

创建MongoDB数据库

创建项目

1.在MongoDB官网注册一个账号,然后新建一个项目:
在这里插入图片描述

2.命名项目
给项目起个名字,这里起名:restfule-api-test
在这里插入图片描述

3.由于是自己测试搭建,因此User只设置成自己,没有添加其他用户,然后点击”创建项目“
在这里插入图片描述
4.这时会有一个验证信息,通过你注册的邮箱账号发给你,点击一下里面的"sign in"按钮,然后重新登录一下官网账号,项目就创建成功了


配置项目

左下角有个"get start"向导,可以根据"get start"一步步操作(没有也没关系,只要主要的步骤不落下就可以搭建成功)

新建集群

1.先点击"创建集群"按钮
在这里插入图片描述
2.选择免费的服务
在这里插入图片描述
3.页面会默认勾选免费(FREE)的服务,确认一下左下角的FREE标记即可,点击创建集群
在这里插入图片描述
等待几分钟,这个过程稍慢些
在这里插入图片描述
新的集群就创建好啦
在这里插入图片描述


创建一个新的数据库用户

1.左边侧边栏选择"Database Access"
在这里插入图片描述
2.选择添加新的数据库用户
在这里插入图片描述
3.默认是通过用户名密码来认证的,我们添加用户名和密码即可,密码不能过于简单
在这里插入图片描述
4.默认用户权限是可读可写的,可以修改
在这里插入图片描述

5.点击添加用户
在这里插入图片描述
6.添加成功在这里插入图片描述


在允许访问列表中添加IP地址

1.在侧边栏选择"Network Access",点击添加IP地址

在这里插入图片描述
2.由于是自己测试,此处选择允许所有IP访问(可以根据需要,限制某个网段才能访问)
在这里插入图片描述
此时状态为pending,需要通过注册的邮箱再次验证
在这里插入图片描述
认证之后,状态就变成了Active
在这里插入图片描述


数据库连接自己的集群

左侧侧边栏选择"Clusters",会显示一个"CONNECT"按钮,点击连接

在这里插入图片描述
可以选择用于连接我们的应用:
在这里插入图片描述

搭建完成后,会给我们一个连接服务器的地址,node通过这个地址与刚刚创建的mongo数据库连接
在这里插入图片描述

注:如果之后用不到这个集群,要删除,可以通过"Clusters"的"Terminate"删除集群
在这里插入图片描述



Node连接MongoDB数据库

1.安装mongoose

npm install mongoose --save

2.为了能够使用post功能,还需要安装body-parser:

npm install body-parser

3.新建文件夹config,该文件夹下新建文件key.js用来存储mongodb的地址

module.exports = {
    
    mongoURI:"mongodb官网给的地址,记得<password>需要替换成刚刚设置的密码"
}

4.在index.js中引入mongoose和body-parser,并连接mongoDB数据库:

// 引入mongoose
const mongoose = require("mongoose");
// 引入刚刚创建的数据库
const db = require("./config/keys").mongoURI;
// 引入body-parser,用于执行post操作
const bodyParser = require("body-parser");

// 连接mongodb
mongoose
.connect(db,{
     useNewUrlParser: true, useUnifiedTopology: true})
.then(()=>{
    console.log("mongodb connected")})
.catch(err => console.log(err))

5.测试与mongodb的连接
运行项目,如果打印出"mongodb connected",代表连接成功:
在这里插入图片描述

6.测试post操作,创建自定义模块users
新建一个文件夹,名为module,该文件夹下建一个文件,命名users.js,此为自定义的模块,存放要存储的数据格式

const mongoose = require("mongoose");
const Schema = mongoose.Schema;

// 创建UserSchema,包含姓名、邮箱、密码、头像、创建日期
// 其中,姓名、邮箱、密码是必需的
const UserSchema = new Schema({
    
    name:{
    
        type:String,
        require:true
    },
    email:{
    
        type:String,
        require:true
    },
    password:{
    
        type:String,
        require:true
    },
    profilePicture:{
    
        type:String
    },
    Date:{
    
        type:Date,
        default:Date.now()
    }
})

// 将UserSchema开放出去,别名users
module.exports = User = mongoose.model("users",UserSchema)

7.设置路由,执行post操作
新建文件夹routers,再建一个子文件夹api,子文件夹api下创建User.js,是users模块的路由文件

const express = require("express");
const router = express.Router();
// 测试路由功能
router.get("/test",(req,res)=>{
    
    res.json({
    msg:"route works"})
})

// 测试连接MongoDB的路由并post数据到数据库
router.post('/register', (req, res) => {
    
    // console.log(req.body);
    User.findOne({
     email: req.body.email })
        .then((user) => {
    
            if (user) {
    
                return res.status(400).json({
     email: "邮箱已被注册!" })
            } else {
    
                const newUser = new User({
    
                    name: req.body.name,
                    email: req.body.email,
                    password: req.body.password
                })

            // 密码加密
            bcrypt.genSalt(10, function (err, salt) {
    
                bcrypt.hash(newUser.password, salt, (err, hash) => {
    
                    // Store hash in your password DB.
                    if (err) throw err;
                    newUser.password = hash;
                    newUser.save()
                        .then(user => {
     res.json(user), console.log(newUser) })
                        .catch(err => console.log(err))
                });
            });

            }
        })
})

module.exports = router;

8.使用模块,测试post操作下与mongodb的连接

在index.js文件中:

//引入users
const users=require('./routers/api/User');
// 使用bodyParser中间件,对应postman中Body的x-www-form-urlencoded格式
// 这两行代码要写在app.use("/api/users",users)前面,否则无法识别到从postman输入的数据,只能得到undefined
app.use(bodyParser.urlencoded({
    extended:false}));
app.use(bodyParser.json());
// 使用中间件
app.use("/api/users",users);

9.在postman中测试
通过postman发送post请求:
在这里插入图片描述

查看数据库里的数据,有刚刚post上去的数据,代表post成功啦
在这里插入图片描述
9.设置路由,执行get操作

router.get('/getUserMsg',(req,res)=>{
    
    User.findOne({
    name:"ccy"})
    .then((user) => {
    res.json(user)})
})

在postman中测试,获得数据库中的信息:
在这里插入图片描述

与mongodb的基本连接就是这样啦~

欢迎大佬们点赞、评论、收藏、分享,谢谢支持和指点~

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43523725/article/details/117928596

智能推荐

Pytorch手撸交叉熵CrossEntropyLoss并修改one-hot输入_torch cross_entropy onehot-程序员宅基地

文章浏览阅读4.2k次,点赞17次,收藏37次。目录1 前言2 交叉熵的实现过程3完整的自定义交叉熵4.使用自己one-hot的交叉熵1 前言楼主最近要修改一下one-hot然后送入交叉熵中,由于pytorch的torch.nn.CrossEntropyLoss()已经封装好了one-hot,所以需要自定义重写交叉熵,这里主要是多级交叉熵,而不是二分类交叉熵。2 交叉熵的实现过程首先看多级交叉熵的计算过程:L=−1N∑iN∑c=1Myiclog(pic)L = -\frac{1}{N}\displaystyle\sum_i^N\display_torch cross_entropy onehot

Android 8.0后台执行限制_android 后台数据 多长时间生效-程序员宅基地

文章浏览阅读890次。Android O对应用在后台运行时可以执行的操作施加了限制,称为后台执行限制(Background Execution Limits),这可以大大减少应用的内存使用和耗电量,提高用户体验。后台执行限制分为两个部分:后台服务限制(Background Service Limitations)、广播限制(BroadcastLimitations)。后台服务限制如何才算是后台应用?除了下面情况外都是后..._android 后台数据 多长时间生效

R语言广义线性模型_lrm在r代码-程序员宅基地

文章浏览阅读9.6k次。转载自:http://blog.csdn.net/lilanfeng1991/article/details/361857391.广义线性模型和glm()函数广义线性模型扩展了线性模型的框架,它包含了非正态因变量的分析。广义线性模型通过拟合响应变量的条件均值的一个函数(不是响应变量的条件均值),假设响应变量服从指数分布族中的某个分布(并不仅限于正态分布),极大地扩展了标_lrm在r代码

咂题-程序员宅基地

文章浏览阅读209次。CODEVS1064虫食算题目描述Description所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母。来看一个简单的例子: 43#9865#045+8468#6633 44445506978其中#号代表被虫子啃掉的数字。根据算式,我们很容易判断:第一行的两个数字分别是5和3,第二行的数字是..._26个大写字母都至少出现一次。输出这个区间长度的最小值。

水星1200r服务器无响应,【求助】水星MAC1200R TTL刷机中断u-boot失败-程序员宅基地

文章浏览阅读1.2k次。U-Boot 1.1.3 (Feb 28 2015 - 13:28:42)Board: Ralink APSoC DRAM:64 MBrelocate_code Pointer at: 83fb8000flash manufacture id: ef, device id 40 17find flash: W25Q64BV*** Warning - bad CRC, using default...

彻底理解js是单线程的-程序员宅基地

文章浏览阅读2.2k次,点赞4次,收藏13次。js单线程、宏任务 微任务

随便推点

开源的Java反编译工具JD-GUI_jd-gui官网-程序员宅基地

文章浏览阅读1.1k次。JD-GUI 是一款开源的 Java 反编译工具,支持Windows和苹果Mac OS。以反编译和分析Java 5“字节码”及更高版本,它显示“ .class”文件的Java源代码。可以使用JD-GUI浏览重建的源代码,以立即访问方法和字段。 JD-Eclipse是Eclipse平台的插件。它允许您在调试过程中显示所有Java源代码,即使您没有全部源代码也是如此。..._jd-gui官网

android ota升级包屏蔽时间戳比较_android ota 升级不对比时间戳-程序员宅基地

文章浏览阅读1.2k次。Android的OTA升级包中,里面有一个升级脚本,该脚本会检测recovey镜像的编译时间和OTA包的编译时间,如果recovey比OTA包的时间要新的话,升级便会失败。方法一:直接屏蔽比较函数,到build/tools/releasetools/ota_from_target_files这个脚本,注释掉函数 script.AssertOlderBuild(ts, ts_text)调用,这样编译..._android ota 升级不对比时间戳

QT图片转Base64数据 与 Base64转图片_qt base64转图片-程序员宅基地

文章浏览阅读3.6k次,点赞3次,收藏22次。图片转Base64数据 m_imagePath = QFileDialog::getOpenFileName(this, tr("select image"), "./pic/", tr("Image Files(*.jpeg *.jpg *.png *.bmp *.pgm *.pbm);;All(*.*)")); //选择图片 ui->imageDataPath->setText(m_qt base64转图片

MySQL存储函数之如何用in查询_mysql中的in查询-程序员宅基地

文章浏览阅读1k次。MySQL 存储过程_mysql中的in查询

安装Ubuntu后无法启动_ubuntu安装后无法启动-程序员宅基地

文章浏览阅读7.4k次。安装完Ubuntu20.04后,重启,只有一个下划线在左上角闪烁。或者有一个grub引导命令。_ubuntu安装后无法启动

微信公众号--发送模板消息_公众号模板消息-程序员宅基地

文章浏览阅读2.8k次,点赞2次,收藏5次。官网提示为AppSecret错误或者AppSecret不属于这个公众号,请开发者确认AppSecret的正确性。后台代码如下,用到的字段根据自己的项目进行修改,各类id自行获取(AppID可在基本配置中查看)1、点击模板消息后点击从历史模板库中添加即可选择模板。若已开通则如下图,在已开通中可查看。开通需要费用以及验证,开通后如下图。2、点击新的功能后,找到模板消息。将自己电脑的ip地址加上去即可。1、在左侧菜单栏找到模板消息。2、扫码登录后即可跳转。若找不到则点击新的功能。1、搜索微信公众平台。_公众号模板消息

推荐文章

热门文章

相关标签