无法实现注册功能,前端无法提交数据给数据库

无法实现注册功能,前端无法提交数据给数据库

报错 Error: Error: Network Error

    at _callee2$ (ajax.js?ab3e:46:1)

    at tryCatch (runtime.js?96cf:45:1)

    at Generator.invoke [as _invoke] (runtime.js?96cf:271:1)

    at prototype.<computed> [as throw] (runtime.js?96cf:97:1)

    at asyncGeneratorStep (asyncToGenerator.js?1da1:3:1)

    at _throw (asyncToGenerator.js?1da1:29:1)


尝试换成老师的后端代码,结果注册功能是能正常运行的,因此数据库方面链接应是没有问题的。感觉是路由部分出了问题,尝试将老师给的资料中后端路由相关代码(router目录下的users和src目录下的app.js,db目录下的db.js)替换我的代码,但程序仍旧报错,找不出问题所在,望解答,另外,为什么在开发者工具里的网络中他没有连接成功却没有返回相关的状态代码?截图如下

https://img1.sycdn.imooc.com//climg/62e24fdf0986a7b825601600.jpg

以下为我的代码,

app.js 部分

const Koa = require('koa')

const app = new Koa()

const views = require('koa-views')

const json = require('koa-json')

const onerror = require('koa-onerror')

const bodyparser = require('koa-bodyparser')

const logger = require('koa-logger')

const cors = require('koa-cors')


// 引入路由

const index = require('./routes/index')

const users = require('./routes/users')


// error handler

onerror(app)


// middlewares

app.use(bodyparser({

  enableTypes:['json', 'form', 'text']

}))

app.use(json())

app.use(logger())

app.use(require('koa-static')(__dirname + '/public'))


app.use(views(__dirname + '/views', {

  extension: 'pug'

}))

app.use(cors({

  origin:'http://localhost:8080', //支持前端哪个域跨域

  credential:true,

}))


// logger

app.use(async (ctx, next) => {

  const start = new Date()

  await next()

  const ms = new Date() - start

  console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)

})


// routes

app.use(index.routes(), index.allowedMethods())

app.use(users.routes(), users.allowedMethods())


// error-handling

app.on('error', (err, ctx) => {

  console.error('server error', err, ctx)

});


module.exports = app


db目录下的db.js部分

// 链接mongodb数据库服务

const mongoose=require('mongoose')


const url='mongodb://localhost:27017'

const dbName='comment'

mongoose.connect(`${url}/${dbName}`)


const conn=mongoose.connection


conn.on('error',err=>{

    console.error('mongodb连接出错',err)

})


module.exports=mongoose


routers目录下的users.js部分

const router = require('koa-router')()

const { register } = require('../controller/user')


router.prefix('/users')


router.post('/register', async (ctx, next) => {

  // 获取注册信息

  const userInfo = ctx.request.body

  // 提交注册

  try {

    const newUser = await register(userInfo)

    // 成功

    ctx.body = {

      errno: 0,

      data: newUser,

    }

  } catch (ex) {

    console.error('注册失败', ex)

    // 失败

    ctx.body = {

      errno: -1,

      message: '注册失败',

    }

  }

})


module.exports = router


model目录下的user.js

const mongoose = require('../db/db')


const UserSchema = mongoose.Schema({

    Username: {

        type: String,

        required: true,

        unique: true

    },

    password: String,

    age: Number,

    city: String,

    gender: {

        type: Number,

        default: 0//0保密,1男,2女

    }

},

    {

        timestamps: true

    }

)


const User=mongoose.model('user',UserSchema)


module.exports=User


controller目录下的user.js部分

// User Controller


const User=require('../model/User')


async function register(userinfo={}){

    console.log('尝试向数据库写入数据');

    // 插入数据库

    const newUser=await User.create(userinfo)

    // 返回注册的用户信息

    return newUser

}


module.exports={

    register,


}

最后,附上我的npm版本相关

{

  "name": "ProjectComment",

  "version": "0.1.0",

  "private": true,

  "scripts": {

    "start": "node bin/www",

    "dev": "./node_modules/.bin/nodemon bin/www",

    "prd": "pm2 start bin/www",

    "test": "echo \"Error: no test specified\" && exit 1"

  },

  "dependencies": {

    "debug": "^4.1.1",

    "koa": "^2.7.0",

    "koa-bodyparser": "^4.2.1",

    "koa-convert": "^1.2.0",

    "koa-cors": "0.0.16",

    "koa-json": "^2.0.2",

    "koa-logger": "^3.2.0",

    "koa-onerror": "^4.1.0",

    "koa-router": "^7.4.0",

    "koa-static": "^5.0.0",

    "koa-views": "^6.2.0",

    "mongoose": "^6.5.0",

    "pug": "^2.0.3"

  },

  "devDependencies": {

    "nodemon": "^1.19.1"

  }

}



正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,代码存在书写问题,具体修改如下:

1、app.js中,需要做如下修改:

https://img1.sycdn.imooc.com//climg/62e253bb09ca122c05700084.jpg

https://img1.sycdn.imooc.com//climg/62e253e009abc83606870129.jpg

2、User.js中,需要做如下修改:

https://img1.sycdn.imooc.com//climg/62e2540d094093d605840299.jpg

修改后,老师这边可以注册成功:

https://img1.sycdn.imooc.com//climg/62e25457092e6b1a10630422.jpg

问题解答如下:

如果请求根本没有发送成功、连接成功,可能就没有状态码。老师这边测试,状态码中会有提示信息,不是空的:

https://img1.sycdn.imooc.com//climg/62e2551209b0f68b09790170.jpg

所以可能和浏览器也有关系。

祝学习愉快!


  • 慕函数1363199 提问者 #1

    已经通过自己的努力解决了问题,谢谢老师这么快的解惑,但我又有了新的疑问,在解决了跨域cookies问题后,我发现mongodb因为duplicate key error collection无法插入数据,在drop掉users集合后重新生成users集合可以解决该问题。但是这是否意味着mongodb会因为错误操作过多导致他__id的生成会重复产生bug?我们应主动该在mongoose model中手动定义一个不会重复的__id来避免该bug的产生

    2022-07-28 17:31:43
  • 慕函数1363199 提问者 #2

    已经通过自己的努力解决了问题,谢谢老师这么快的解惑,但我又有了新的疑问,在解决了跨域cookies问题后,我发现mongodb因为duplicate key error collection无法插入数据,在drop掉users集合后重新生成users集合可以解决该问题。但是这是否意味着mongodb会因为错误操作过多导致他__id的生成会重复而产生bug?我们应主动该在mongoose model中手动定义一个不会重复的__id来避免该bug的产生?

    2022-07-28 17:33:21
  • 好帮手慕久久 回复 提问者 慕函数1363199 #3

    “duplicate key error collection”这个错误,不一定是id重复造成的。可能是其他键重复造成的,比如用户名重复。一般来讲,id是数据库自动生成的,不需要我们手动操作,它几乎不会重复,多数都是我们自己设置的属性重复了。如果出现了id重复的问题,这个时候只能手动调整数据库中的数据,手动更正一下。

    2022-07-28 18:21:02
慕函数1363199 提问者 2022-07-28 17:16:48

已经找到问题所在,源于后端代码中的app.js 

credentials:true代码拼写错误所致,但又出现了新的错误,注册无法成功


  • 提问者 慕函数1363199 #1

    发现后面注册无法成功是因为mongodb生成的id建重复,导致无法插入数据,可能是源于之前过多的错误操作所导致的问题,通过drop users集合后重新生成users集合解决了该问题。以后的数据规范中可能还是要自己手动定义一个不会重复的主键来避免该bug的产生

    2022-07-28 17:27:30
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师