技术标签: node.js 新星计划十篇文 新星计划 # NodeJS-ExpressAPI学习与使用 mongodb
本文原创为CSDN博主:安之ccy,博客首页地址:https://blog.csdn.net/qq_43523725
转载请注明出处,谢谢支持和鼓励
正文bgm起~
创建MongoDB数据库
创建项目
配置项目
新建集群
创建一个新的数据库用户
在允许访问列表中添加IP地址
数据库连接自己的集群
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数据库~
1.在MongoDB官网注册一个账号,然后新建一个项目:
2.命名项目
给项目起个名字,这里起名:restfule-api-test
3.由于是自己测试搭建,因此User只设置成自己,没有添加其他用户,然后点击”创建项目“
4.这时会有一个验证信息,通过你注册的邮箱账号发给你,点击一下里面的"sign in"按钮,然后重新登录一下官网账号,项目就创建成功了
1.先点击"创建集群"按钮
2.选择免费的服务
3.页面会默认勾选免费(FREE)的服务,确认一下左下角的FREE标记即可,点击创建集群
等待几分钟,这个过程稍慢些
新的集群就创建好啦
1.左边侧边栏选择"Database Access"
2.选择添加新的数据库用户
3.默认是通过用户名密码来认证的,我们添加用户名和密码即可,密码不能过于简单
4.默认用户权限是可读可写的,可以修改
5.点击添加用户
6.添加成功
2.由于是自己测试,此处选择允许所有IP访问(可以根据需要,限制某个网段才能访问)
此时状态为pending,需要通过注册的邮箱再次验证
认证之后,状态就变成了Active
可以选择用于连接我们的应用:
搭建完成后,会给我们一个连接服务器的地址,node通过这个地址与刚刚创建的mongo数据库连接
注:如果之后用不到这个集群,要删除,可以通过"Clusters"的"Terminate"删除集群
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的基本连接就是这样啦~
欢迎大佬们点赞、评论、收藏、分享,谢谢支持和指点~
文章浏览阅读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
文章浏览阅读890次。Android O对应用在后台运行时可以执行的操作施加了限制,称为后台执行限制(Background Execution Limits),这可以大大减少应用的内存使用和耗电量,提高用户体验。后台执行限制分为两个部分:后台服务限制(Background Service Limitations)、广播限制(BroadcastLimitations)。后台服务限制如何才算是后台应用?除了下面情况外都是后..._android 后台数据 多长时间生效
文章浏览阅读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个大写字母都至少出现一次。输出这个区间长度的最小值。
文章浏览阅读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...
文章浏览阅读2.2k次,点赞4次,收藏13次。js单线程、宏任务 微任务
文章浏览阅读1.1k次。JD-GUI 是一款开源的 Java 反编译工具,支持Windows和苹果Mac OS。以反编译和分析Java 5“字节码”及更高版本,它显示“ .class”文件的Java源代码。可以使用JD-GUI浏览重建的源代码,以立即访问方法和字段。 JD-Eclipse是Eclipse平台的插件。它允许您在调试过程中显示所有Java源代码,即使您没有全部源代码也是如此。..._jd-gui官网
文章浏览阅读1.2k次。Android的OTA升级包中,里面有一个升级脚本,该脚本会检测recovey镜像的编译时间和OTA包的编译时间,如果recovey比OTA包的时间要新的话,升级便会失败。方法一:直接屏蔽比较函数,到build/tools/releasetools/ota_from_target_files这个脚本,注释掉函数 script.AssertOlderBuild(ts, ts_text)调用,这样编译..._android ota 升级不对比时间戳
文章浏览阅读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转图片
文章浏览阅读1k次。MySQL 存储过程_mysql中的in查询
文章浏览阅读7.4k次。安装完Ubuntu20.04后,重启,只有一个下划线在左上角闪烁。或者有一个grub引导命令。_ubuntu安装后无法启动
文章浏览阅读2.8k次,点赞2次,收藏5次。官网提示为AppSecret错误或者AppSecret不属于这个公众号,请开发者确认AppSecret的正确性。后台代码如下,用到的字段根据自己的项目进行修改,各类id自行获取(AppID可在基本配置中查看)1、点击模板消息后点击从历史模板库中添加即可选择模板。若已开通则如下图,在已开通中可查看。开通需要费用以及验证,开通后如下图。2、点击新的功能后,找到模板消息。将自己电脑的ip地址加上去即可。1、在左侧菜单栏找到模板消息。2、扫码登录后即可跳转。若找不到则点击新的功能。1、搜索微信公众平台。_公众号模板消息