介绍
使用koa搭建node服务 并连接mongodb返回前端数据
项目初始化
首先保证你的node环境已经就绪
1、创建项目文件夹
创建文件夹test,在文件夹中shift+右键 在此处运行命令行
运行 npm init –y
2、 安装依赖
npm i koa koa-body koa-static koa-cors
创建服务
// server.js
/*
* 1、在项目文件中创建一个server.js文件
* 2、在项目跟目录运行 node server.js
* 3、浏览器地址输入 http://127.0.0.1:3001/ 返回 your server run seccess
*/
const Koa = require("koa");
const app = new Koa();
// ctx表示一次对话的上下文(包括 HTTP 请求和 HTTP 回复)
app.use(ctx => {
ctx.body = "your server run seccess"
})
// 监听3001端口
app.listen(3001, () => {
console.log("server run on 127.0.0.1:3001");
});
路由使用
/*
* 1、创建routers文件夹 文件夹下的每个目录都将是一个访问的处理
* 2、routers文件夹 创建一个demo文件夹并拥有index.js
* 3、在routers文件夹下创建routers.js 用户集中路由
* 目录结构
-server.js
-routers
-routers.js
-demo
-index.js
-router.js
*/
// ----server.js 文件 ----
const Koa = require("koa");
const koaBody = require("koa-body");
const static = require('koa-static')
//const cors = require('koa-cors')
// 引入router创建好的
let router = require("./router.js");
const app = new Koa();
// 解析post请求体
app.use(koaBody());
// 设置跨域 用不用插件都可
app.use(async (ctx, next) => {
ctx.set("Access-Control-Allow-Origin", "*");
return next();
});
// app.use(cors())
// 路由挂载
app.use(router.routes());
// 静态文件处理
app.use(static(path.join(__dirname)))
// 监听3001端口
app.listen(3001, () => {
console.log("server run on 127.0.0.1:3001");
});
// -------server.js 结束----------
// ------- router.js -----
let Router = require("koa-router");
let routers = require("./routers/routers.js");
let router = new Router();
routers.forEach(r => {
router.all(r.path, r.handle)
});
module.exports = router;
// ------ server.js 结束 ------
// ------ routers/routers.js start-----
let demo = require('./demo/index.js')
let test = require('./test/index.js')
module.exports = [
demo,
test
]
// ------ routers/routers.js end -----
// ------ routers/demo/index.js start -----
module.exports = {
path: "/demo/returnsomething",
async handle(ctx, next) {
// 拿到请求输入
let params = ctx.request.body;
// 业务逻辑处理
console.log(params);
// 返回前端数据
ctx.body = { res: "SUCCESS", data: '', code: 2000 };
}
};
// ------ routers/demo/index.js end -----
// node server 访问 http://127.0.0.1:3001//demo/returnsomething
mongodb 连接
/*
* 1、首先我们在server.js同级目录创建utils目录 并创建connect.js 用公共方法的封装
*/
// --- utils/connect.js---
// 安装依赖 npm i mongodb assert
const MongoClient = require("mongodb").MongoClient;
const assert = require("assert");
// Connection URL mongo服务地址
const url = "mongodb://localhost:27017";
// Database Name 确保mongo中有test库
const dbName = "test";
// 公共的连接方法
const connect = (tableName, callback) => {
MongoClient.connect(
url,
{ useNewUrlParser: true },
function(err, client) {
assert.equal(null, err);
const db = client.db(dbName);
callback(db.collection(tableName));
client.close();
}
);
};
// 封装一个向mongo插入多条数据的方法
exports.insertMany = (tableName, condition, params) => {
return new Promise((resolve, reject) => {
connect(tableName, collection => {
collection.insertMany(condition, params, (err, result) => {
if (err) {
console.log(err);
reject();
} else {
resolve(result);
}
});
});
});
};
// 封装一个查找数据库的方法
exports.findMany = (tableName, condition) => {
return new Promise((resolve, reject) => {
connect(
tableName,
collection => {
collection.find(condition).toArray((err, result) => {
if (err) {
console.log(err);
reject();
} else {
resolve(result);
}
});
}
);
});
};
// ------ end -------
// 在路由中调用
// ---- routers/dome/index.js ----
const { findMany } = require("../../utils/connect");
module.exports = {
path: "/servers/addapi",
async handle(ctx, next) {
let params = ctx.request.body;
// 查找数据库 返回值 参数:表明, 条件
let res = await findMany("user", {});
console.log(res);
ctx.body = { res: "SUCCESS", data: res, code: 2000 };
}
};