Node.js TypeError:无法读取未定义的属性“作者”
Posted
技术标签:
【中文标题】Node.js TypeError:无法读取未定义的属性“作者”【英文标题】:Node.js TypeError: Cannot read property 'author' of undefined 【发布时间】:2021-05-11 08:43:48 【问题描述】:(已更新)
问题: 我无法返回我所有的测试数据(如图所示) No data show up 我期望的应该是->
"data":["id": 1,"title": "title A","content": "content A","createTime": 1612708329045,"author": "Alisa", "id": 2,"title": "title B","content": "content B","createTime": 1612708333855,"author": "Alisa"],"errno":0
来自终端的错误消息:
PS C:\Users\jiann\Desktop\JS\Nodejs> node www.js
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'C:\Users\jiann\Desktop\JS\Nodejs\www.js'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
at internal/main/run_main_module.js:17:47
code: 'MODULE_NOT_FOUND',
requireStack: []
我不知道哪里出错了:(。 如果需要更多详细信息,请告诉我,感谢您的帮助!
我的代码如下:
代码块 1 说明: 如果成功获取数据和消息,显示“errno”:0,如果没有,则显示“errno”:-1
class BaseModel
constructor(data, message)
if (typeof data === 'string')
this.message = data
data = null
message = null
if (data)
this.data = message
if (message)
this.message = message
class SuccessModel extends BaseModel
constructor(data, message)
super(data, message)
this.errno = 0
class ErrorModel extends BaseModel
constructor(data, message)
super(data, message)
this.errno = -1
module.exports =
SuccessModel,
ErrorModel
代码块 2 说明:
为我的博客和用户设置路由器。该代码块将设置JSON数据格式,设置URL路径,解析查询,如果没有找到路由器,则返回404。
const querystring = require('querystring')
const handleBlogRouter = require('./blog-1/src/router/blog')
const handleUserRouter = require('./blog-1/src/router/user')
const serverHandle = (req, res) =>
// set JSON
res.setHeader('Content-type', 'application/json')
//get path
const url = req.url
req.path = url.split('?')[0]
//parse query
req.query = querystring.parse(url.split('?')[0])
//set blog router
const blogData = handleBlogRouter(req, res)
if (blogData)
res.end(
JSON.stringify(blogData)
)
return
//set user router
const userData = handleUserRouter(req, res)
if (userData)
res.end(
JSON.stringify(userData)
)
return
//no router
res.writeHead(404, "Content-type": "text/plain")
res.write("404 Not Found\n")
res.end()
module.exports = serverHandle
代码块 3 说明: 使用 GET 和 POST 要求来自路径的数据 -> '/api/博客/列表' '/api/博客/详细信息' '/api/博客/新的' '/api/博客/更新' '/api/blog/del'
const getList, getDetail = require('../controller/blog')
const SuccessModel, ErrorModel = require('../model/resModel')
const handleBlogRouter = (req, res) =>
const method = req.method // GET POST
if (method === 'GET' && req.path === '/api/blog/list')
const author = req.query.author || ''
const keyword = req.query.keyword || ''
const listData = getList(author, keyword)
return new SuccessModel(listData)
if (method === 'GET' && req.path === '/api/blog/detail')
const id = req.query.id
const data = getDetail(id)
return new SuccessModel(data)
if (method === 'POST' && req.path === '/api/blog/new')
return
msg: 'dummy'
if (method === 'POST' && req.path === '/api/blog/update')
return
msg: 'dummy'
if (method === 'POST' && req.path === '/api/blog/del')
return
msg: 'dummy'
module.exports = handleBlogRouter)
代码块 4 说明: 这是我的两个测试数据。
const getList = (author, keyword) =>
//fake data
return [
id: 1,
title: 'title A',
content: 'content A',
createTime: 1612708329045,
author: 'Alisa'
,
id: 2,
title: 'title B',
content: 'content B',
createTime: 1612708333855,
author: 'Amanda'
]
module.exports =
getList
)
【问题讨论】:
嗨@Jiann。感谢您发布此信息。您能否查看Minimal, Reproducible Example guide 并更新您的问题。您在这里包含了很多代码,但不清楚问题出在哪里。 此外,您在标题中提到的错误消息()未在您的问题中提及。请简化问题以说明您何时何地收到此错误。 嗨@James 感谢您的建议!抱歉,我在面对这个问题时有点恐慌,这是我在 *** 上的第一篇文章......我整理了我的问题,希望它更容易理解。 没问题建恩。看起来您现在有了一些答案,所以我想这些改进有所帮助。感谢您的提问! @James 其实我还没有弄清楚这个问题...你能帮我指出我的代码问题在哪里吗? 【参考方案1】:此错误表示您正在访问<?>.author
,但<?>
是undefined
。
例如,如果您的错误在这里:
if (method === 'GET' && req.path === '/api/blog/list')
const author = req.query.author || ''
// ^^^ TypeError: Cannot read property 'author' of undefined
const keyword = req.query.keyword || ''
这意味着req.query
是undefined
。如果有机会会出现,您可以使用可选链接:
let foo = undefined;
foo.bar; // TypeError: Cannot read property 'bar' of undefined
foo?.bar; // => undefined
foo?.bar.baz; // TypeError: Cannot read property 'baz' of undefined
foo?.bar?.baz; // => undefined
【讨论】:
我更新了我的问题并添加了更多细节,希望它可以帮助您理解我的问题。感谢您的帮助【参考方案2】:错误是因为您的服务器没有正确启动,所以您期望的所有这些值都将不可用。你用什么命令启动服务器?
【讨论】:
我只是输入了“node www.js”来启动终端上的服务器。 www.js 是我创建的名称。以上是关于Node.js TypeError:无法读取未定义的属性“作者”的主要内容,如果未能解决你的问题,请参考以下文章
Node.js Discord.js UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性“calculatedPosition”
Node.js TypeError:无法读取未定义的属性“作者”
Node.js TypeError无法读取未定义的属性objectId
Node.js 和 jdbc:TypeError:无法读取未定义的属性“url”