A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

相信这对于想要入门写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的bodyconst 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 = routerexport default router复制代码这时候我们就可以愉快的开始我们的nodejs+koa项目了,再稍微将文件处理下,模块的区分,就可以完成一个基本框架的构建啦。



链接:https://juejin.im/post/5bad9b1af265da0ae80120fe



1 个回复

倒序浏览
奈斯
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马