首页 > 数据库 >nodejs+koa2+mongodb 从0到1搭建自己的项目

nodejs+koa2+mongodb 从0到1搭建自己的项目

时间:2023-09-15 11:13:10浏览次数:51  
标签:const nodejs koa mongodb app js koa2 router require

nodejs+koa2+mongodb 从0到1搭建自己的项目

YDJFE 2018-09-28 11:2419207  

 

 

相信这对于想要入门写nodejs的朋友来说,一定会有所收获,那么,下面开始我们的正题(这里不使用koa-generator脚手架,我们直接自己搭建项目,适用于前后端分离)

一:创建项目

可以在全局中安装koa依赖包 (保持项目版本的统一性)
  复制代码
npm install -g koa 
或者在我们本地项目中安装
  复制代码
npm install koa --save

最基本的开发环境我们已经搭建完了,可以开始koa之旅了:

  复制代码
const Koa = require('koa');
const app = new Koa();

// 对于任何请求,app将调用该异步函数处理请求:
app.use(async (ctx, next) => {
    await next();
    // todo
});

app.use(async (ctx, next) => {
    await next();
    // todo
});

// 在端口8081监听:
app.listen(8081);

最原始的写法就是使用app.use(async (ctx, next) => {}),只有当next()之后才能执行下一个app.use(),所以这里引入了koa-router

二. 添加路由

  复制代码
npm install koa-router koa-bodyparser --save
  复制代码
const Koa = require('koa');
const bodyParser = require('koa-bodyparser');
const app = new Koa();
app.use(bodyParser());  // 解析request的body

const router = require('koa-router')()
router.get('/', async (ctx, next) => {
	// todo
})
app.use(router.routes());
app.listen(9000);
console.log('app started at port 9000...')

这样直接访问 http://localhost:9000, 就可以访问到了

你也可以为你的路由加个前缀

  复制代码
const Router = require('koa-router')

const router = new Router({
	prefix: '/api'
})

这样只需要访问 http://localhost:9000/api, 而我们写接口的时候,这个前缀就可以说是少不的了。

三.热重启的处理

每一次我们修改都要关闭程序,然后再npm start, 这是想起webpack的热更是多么的舒服,想着要用webpack搭建吗,这时候就要用到nodemon(Nodemon是一个实用程序,用于监视源中的任何更改并自动重新启动服务器。完美的发展), 它还支持自定义配置nodemon.json这里不做配置,直接使用

  复制代码
npm install nodemon --save

修改package.json

  复制代码
"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "nodemon app.js"
  },

运行npm start,这样就达到了热重启的效果了,可以愉快的开发了

 

 

四.支持import模块的引入

由于目前原生的node是不支持import引入模块的,假如你使用import引入模块的话,会报如下的错:

 

 

这时候我们安装以下依赖

  复制代码
npm install babel-plugin-transform-es2015-modules-commonjs babel-register --save

在根目录下创建start.js

  复制代码
require('babel-register')
(
  {
    plugins: ['babel-plugin-transform-es2015-modules-commonjs'],
  }
)

module.exports = require('./app.js')

在修改下package.json

  复制代码
"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "nodemon star.js"
  },

直接运行npm start, 这时候可以看到我们的项目已经支持import语法了

 

 

五.连接上mongodb和mongoose

这里就不做mongodb的安装教程了,小伙伴们可以自行先去安装好mongodb,安装好之后,看到如下图片说明安装和启动成功了

 

 

  复制代码
npm install mongoose --save

接下来我用简单暴力的方法来连接我们的数据库mongodb, 这里为了方面让大家明白,就不做层次的处理以及文件的处理(实际项目这样做估计是加不了薪的噢)

在app.js中添加

  复制代码
const db = mongoose.connect("mongodb://localhost/testDB")

// 账户的数据库模型
var UserSchema = new mongoose.Schema({
    username:String,
    password:String,
    email:String
});
var User = mongoose.model('User',UserSchema);

// 新增数据
var user = {
  username: 'ydj',
  password: '123123',
  email: ''
}
var newUser = new User(user);
newUser.save();

router.get('/', async (ctx, next) => {
	let val = null
	const data = await User.findOne({username: 'ydj'})
	console.log('data', data)
	const result = {
		code:200,
		response: data,
		ts: 12345
	}
	ctx.response.body = result
	return result
})

这里的操作是: 新建一个用户的数据模型,接着讲user的数据加入到我们的testDB数据库中,接着当我们访问localhost:9000的时候,就会请求我们的数据库,查询到数据之后返回。可以从上面图上看到,我们刚开始是没有users这个集合的,当我们运行该程序的时候,我们的数据库就会自动新增该集合了和数据了:

 

 

运行之后:

访问我们的localhost:9000

 

 

前端的小伙伴们,看到这个会不会很鸡冻,打开就是后端每天给我们提供的接口数据了,泪崩ing。

 

六.解决跨域

最后当我们写好的接口要提供给别人的时候,跨域的问题是必须解决的,koa这边也很好处理,提供了koa2-cors处理

  复制代码
npm install koa2-cors --save
  复制代码
const cors = require('koa2-cors')
app.use(cors({
    exposeHeaders: ['WWW-Authenticate', 'Server-Authorization', 'Date'],
    maxAge: 100,
    credentials: true,
    allowMethods: ['GET', 'POST', 'OPTIONS'],
    allowHeaders: ['Content-Type', 'Authorization', 'Accept', 'X-Custom-Header', 'anonymous'],
}));

关于koa2-cors其他相关配置,大家可以自行网上搜索

七.总结

项目目录结构

  复制代码
├── node_modules             依赖包
├── routes                   路由
|   ├── index.js             
|   ├── user.js              
├── app.js                   主入口文件
├── start.js                 处理import配置文件
└── package.json

app.js

  复制代码
const Koa = require('koa')
const mongoose = require('mongoose')
const cors = require('koa2-cors')
const router = require('koa-router')()
// import router from './routes'

const app = new Koa()

// 处理跨域的配置
app.use(cors({
    exposeHeaders: ['WWW-Authenticate', 'Server-Authorization', 'Date'],
    maxAge: 100,
    credentials: true,
    allowMethods: ['GET', 'POST', 'OPTIONS'],
    allowHeaders: ['Content-Type', 'Authorization', 'Accept', 'X-Custom-Header', 'anonymous'],
}));


const db = mongoose.connect("mongodb://localhost/testDB")

var UserSchema = new mongoose.Schema({
    username:String,
    password:String,
    email:String
});

var User = mongoose.model('User',UserSchema);

router.get('/', async (ctx, next) => {
	let val = null
	const data = await User.findOne({username: 'yidong'})
	console.log('data', data)
	const result = {
		code:200,
		response: data,
		ts: 12345
	}
	ctx.response.body = result
	return result
})

app.use(router.routes());

app.listen(9000);
console.log('app started at port 9000...')

package.json

  复制代码
{
  "name": "yid",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "dependencies": {
    "babel-plugin-transform-es2015-modules-commonjs": "^6.26.2",
    "babel-register": "^6.26.0",
    "koa": "^2.5.3",
    "koa-bodyparser": "^4.2.1",
    "koa-router": "^7.4.0",
    "koa2-cors": "^2.0.6",
    "mongoose": "^5.2.17",
    "nodemon": "^1.18.4"
  },
  "devDependencies": {},
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "nodemon app.js"
  },
  "author": "",
  "license": "ISC"
}

start.js

  复制代码
require('babel-register')
(
  {
    plugins: ['babel-plugin-transform-es2015-modules-commonjs'],
  }
)

module.exports = require('./app.js')

routes/index.js

  复制代码
const router = require('koa-router')()

router.get('/', async (ctx, next) => {
  ctx.body = "<div>Hello</div>"
})

router.get('/string', async (ctx, next) => {
  ctx.body = 'koa2 string'
})

router.get('/json', async (ctx, next) => {
  ctx.body = {
    title: 'koa2 json'
  }
})

// module.exports = router
export default router

这时候我们就可以愉快的开始我们的nodejs+koa项目了,再稍微将文件处理下,模块的区分,就可以完成一个基本框架的构建啦。

标签:const,nodejs,koa,mongodb,app,js,koa2,router,require
From: https://www.cnblogs.com/sexintercourse/p/17704493.html

相关文章

  • 在nodejs中使用Typescript 金字教程
    1.首先新建一个项目npminit-yes2.开启Typescript依赖npminstalltypescript--save-dev安装typescript,现在我们可以通过命令行来使用tsc命令3.安装nodejs类型npminstall@types/node--save-dev4.使用命令创建一个tsconfig.json文件npxtsc--init--rootDir......
  • nodeJs读取JOSN文件导出多个word文件
    前言最近遇到一个需求,读取JOSN文件,以JSON文件的标题为word的文件名导出多个文档,利用nodeJs和 officegen实现了该功能exportWords.js代码如下/***读取指定文件夹下的JSON文件,导出多个word文件*一个json文件导出多个word文件,通常以json文件中的title作为导出的word的文......
  • nodeJS读取JSON文件导出word文档
    前言最近遇到一个需求,将JSON文件的内容,导出到word文档,利用nodeJs和Officegen实现了文件导出的功能exportAWord.js代码如下/***读取指定文件夹下的JSON文件,导出为word*一个json文件为一个word,以json文件的名称为word文件的名称*/letfs=require("fs");letpath=......
  • MongoDB Sharding深入学习
    对于MongoDB的Sharding(分片)技术并不陌生,但是发现里面其实还是有不少值得深入学习的东西。笔记整理一下发上来跟大家分享。-----------------------------------一、MongoDB分片机制:1、一个分片包含数据的某一子集。若某一分片包含多台服务器。则每台服务器都拥有完整的数据副本。......
  • mongodb
    什么是findAndModify操作?findAndModify是MongoDB中的一个原子操作,它可以在一个操作中查找文档并进行修改。它可以在多线程环境中安全地更新文档,避免了竞态条件。在findAndModify操作中,你可以指定一个查询条件来选择要修改的文档,并可以通过提供更新操作来修改该文档。在修改完成后,f......
  • vscode 终端报错:无法加载文件 D:\nodejs\npm.ps1,因为在此系统上禁止运行脚本。
    问题:vscode终端执行npm指令时报错如下解决:1.在终端通过输入指令get-ExecutionPolicy得到以下结果:表示当前执行策略为受限的2.执行指令Set-ExecutionPolicy-ScopeCurrentUser,并输入RemoteSigned。Set-ExecutionPolicy语法如下:Set-ExecutionPolicy[-Execu......
  • kubernetes部署mongoDB 单机版 自定义配置文件、密码、日志路径等
    来源:https://aijishu.com/a/1060000000097166官方镜像地址: https://hub.docker.com/_/mong...docker版的mongo移除了默认的/etc/mongo.conf,修改了db数据存储路径为/data/db.创建configmap配置,注意不能加fork=true,否则Pod会变成Completed。apiVersion:v1kind:ConfigMap......
  • K8s - 安装部署MongoDB数据库教程1(单实例)
    来源:https://www.hangge.com/blog/cache/detail_3158.htmlMongoDB 是一个基于分布式文件存储的数据库。我之前文件中介绍如何使用官方提供的安装包进行 MongoDB 数据库的安装(点击查看),以及如何通过 Docker 来快速搭建 MongoDB 数据库环境(点击查看)。本文接着演示如何在 Ku......
  • MongoDB监测工具
    mongostatinsert表示每秒插入数据库的对象数量,如果跟在一个*后面,表示这是复制操作query每秒查询操作数量update每秒更新操作数量delete每秒删除操作数量getmore每秒getmore操作的数量command每秒执行数据库命令操作的数量(比如插入、查找、更新、删除等等)flushes每秒......
  • nodejs的安装和环境配置
    安装nodejsWindows下载安装包下载地址:https://nodejs.org/zh-cn/download安装nodejs软件本次安装在D盘,路径D:\ProgramFiles\nodejs新建全局路径和缓存路径在nodejs的安装目录下,新建node_global和node_cache文件夹。配置nodejs的configprefix和cache路径使用管理......