当前位置: 首页 > news >正文

wordpress 前台发文章/seo资讯

wordpress 前台发文章,seo资讯,企业网站实名制,wordpress 08影院2.0大家好,我是梅巴哥er,本篇介绍关于Cannot read property _id of undefined这个报错的解决。 俗话说,一杯茶,一支烟,一个BUG改一天。 必须要写个博客纪念下,昨天搞到凌晨五点,终于解决了这个问…

大家好,我是梅巴哥er,本篇介绍关于Cannot read property '_id' of undefined这个报错的解决。

俗话说,一杯茶,一支烟,一个BUG改一天。

必须要写个博客纪念下,昨天搞到凌晨五点,终于解决了这个问题。主要还是懂的太少,写的项目不多,遇到问题,只能一步步查原因,一点点的搜索,过程非常非常慢,非常非常的艰难。而且这个报错都搜不到解决办法,只能自己摸索。

看前提示:这里面注释掉的代码,都是我在测试时用来验证错误出在哪里的代码。为方便大家理解这个解决问题的思路,注释代码我就保留了。

先看下报错原因:
我分别在cookie和响应数据data中,用到了user._id,本来想着这样用,也没什么错,毕竟保存user的时候,会自动生成一个_id,看似很合理,但是为啥又报错了呢?
(附代码)

// 注册的路由
router.post('/register', function(req, res) {// 读取请求参数数据const { username, password, type } = req.body// console.log(id)// const _id = id// console.log(typeof(_id))// console.log(req.body)// console.log(req.body.username)// console.log({ username })// console.log(username)// console.log({ username, password, type })// 处理// 1,判断 看用户是否存在UserModel.findOne( { username }, function(err, user) {// console.log(user)// console.log(username)// console.log(user.username)if (user) { // user已存在,user值为true// 返回提示错误信息res.send({ code: 1, msg: '此用户已存在' })// console.log(user)} else { // user不存在// console.log(user)// 保存注册的用户数据new UserModel({ username, password: md5(password), type }).save(function(err, user) {// console.log(user)// 在发送响应数据之前,生成一个cookie(userid: user._id),// 并交给浏览器保存// 参数maxAge单位是毫秒,表示cookie存活的时间。// 1000*60*60*24 是一天res.cookie('userid',  user._id , { maxAge: 1000*60*60*24 })// 响应数据中,不要携带密码const data = { _id: user._id , username, type } res.send({ code: 0, data })// console.log(err, user)// res.send(user)})}})// 返回响应数据
})

问题解决:
经多次验证和查找资料,确实出在这个_id的应用上。下面逐条说明错误原因和解决思路。

  • 在往数据库中保存数据时,_id确实会自动生成,但是他是ObjectId类型的数据
  • 做响应时,我们会从后台拿到一个id,这个id是json类型的数据。
  • _idid根本不是同一个类型的,当我们把id拿给_id用的时候,就会报错
  • 思路:我们把从后台拿到的json类型的id转换成ObjectId类型的数据不就可以了吗?
  • 于是:
    • 先做个引入:const ObjectId = require('mongodb').ObjectId
    • 再把从后台拿到的id做个转换: const id = ObjectId(req.body.id)
    • 这时候的id就可以给_id用了。俩数据的类型一致了。即{ _id: id}

附正确完整代码:

var express = require('express');
var router = express.Router();
// UserModel在models.js文件里已经暴露出来了,要拿到这里用,所以要先引入
const UserModel = require('../db/models').UserModel
// console.log(UserModel)
// 引入密码加密的包
const md5 = require('blueimp-md5')// 如果没有这里的引入,还有后面id的定义,会报错:
// TypeError: Cannot read property '_id' of undefined
// 解决办法就是,先引入,再定义id,最后把user._id换成id即可。const ObjectId = require('mongodb').ObjectId/* GET home page. */
router.get('/', function(req, res, next) {res.render('index', { title: 'Express' });
});// 测试: 定义一个路由,实现用户注册
/*
a) path为 /register
b) 请求方式为post
c) 接收username和password参数
d) admin是已注册用户
e) 注册成功,返回: { code:0, data: { _id: 'abc', username: 'xxx', password: '123' } }
f) 注册失败,返回: {code: 1, msg: '此用户已存在'}
*/ 
// router.post('/register', (req, res) => {
//   /* 1,获取请求参数
//      2,处理
//      3,返回响应数据 */
//   const {username, password} = req.body
//   if (username === 'admin') {
//     res.send({code: 1, msg: '此用户已存在'})
//   } else {
//     res.send({ code: 0, data: { id: 'abc', username, password } })
//   }
// })// 注册的路由
router.post('/register', function(req, res) {// 读取请求参数数据// 此时的id才是后台传过来的id,才能与数据库对照const id = ObjectId(req.body.id)const { username, password, type } = req.body// console.log(id)// const _id = id// console.log(typeof(_id))// console.log(req.body)// console.log(req.body.username)// console.log({ username })// console.log(username)// console.log({ username, password, type })// 处理// 1,判断 看用户是否存在UserModel.findOne( { username }, function(err, user) {// console.log(user)// console.log(username)// console.log(user.username)if (user) { // user已存在,user值为true// 返回提示错误信息res.send({ code: 1, msg: '此用户已存在' })// console.log(user)} else { // user不存在// console.log(user)// 保存注册的用户数据new UserModel({ username, password: md5(password), type }).save(function(err, user) {// console.log(user)// 在发送响应数据之前,生成一个cookie(userid: user._id),// 并交给浏览器保存// 参数maxAge单位是毫秒,表示cookie存活的时间。// 1000*60*60*24 是一天res.cookie('userid', id/* user._id */, { maxAge: 1000*60*60*24 })// 响应数据中,不要携带密码const data = { _id: id/* user._id */, username, type } res.send({ code: 0, data })// console.log(err, user)// res.send(user)})}})// 返回响应数据
})// const userModel = new UserModel({
//     username: 'ming',
//     password: 233,
//     type: 'dashen'
//   })
//   userModel.save((err, user) => {
//     console.log(err, 'user is', user)
//   })// 登录的路由module.exports = router;

成功解决,保存测试数据附图如下:
在这里插入图片描述

http://www.jmfq.cn/news/4898539.html

相关文章:

  • 淘客做的领券网站/网络营销有哪些例子
  • 加快公司网站建设/百度网址怎么输入?
  • 品牌营销型网站作用/网络营销推广渠道
  • html网站列表怎么做/5g站长工具查询
  • 门户网站的推广/网站出售
  • 销售订单管理系统软件/专业全网优化
  • 大连网络推广平台/网站推广优化怎样
  • 精品网站建设费用 找磐石网络一流/长沙关键词优化推荐
  • 淄博做网站跟优化/网店运营推广实训
  • 浙江省建设委员会网站/3小时百度收录新站方法
  • html5特效网站源码/网站名查询网址
  • 昆明网站开发多少钱/2020站群seo系统
  • 轻淘客网站怎么做/百度推广客户端下载
  • 国家企业年报系统官网/天津seo结算
  • flash网站的制作/东莞网络排名优化
  • 郑州企业健康码二维码怎么申请/优化关键词快速排名
  • 建设平台网站协议/湖人队最新消息
  • 中国建设银行员工网站/媒体邀约
  • 深圳网站设计x/个人如何推广app
  • 松江品划做企业网站/中国十大seo
  • 做的很漂亮的网站/网络推广精准营销推广
  • 建站之星网站模版商城/刷推广软件
  • 免费网站建设自带后台管理程序/网站快速排名互点软件
  • 10大设计师网站/百度广告商
  • 襄阳市做网站/查询网 域名查询
  • 天津建设工程信息网网站首页/福州seo排名公司
  • 安徽省建设监理协会网站/潍坊网站定制模板建站
  • 优秀网站制作实例展示/推广引流的10个渠道
  • 网站怎么做搜索引擎/软文营销成功案例
  • 哪个网站可以自己做名片/网络seo推广