- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 Express 设置 REST API,我最终定义了一些有效的端点和方法,突然出现错误:“TypeError:无法读取未定义的属性‘body’”
我是 JS 的新手,我正在尝试使用 mongodb、express 和 react 构建一个 webapp。
我一直在遵循一些指南(特别是这个指南,因为它也实现了 JWT:https://www.toptal.com/nodejs/secure-rest-api-in-nodejs)
我已经成功地为基本的 CRUD 操作构建了所有用户方法并公开了它们。一切正常,然后我尝试用中间件添加Auth进程,但出现了错误。
我寻找答案,最常见的错误是由于在路由之后调用了 body-parser。但就我而言,我在 user 路由之前调用 auth 路由,效果很好。
这是我的 git repo 以获取更多详细信息: https://github.com/pidanou/btb_api
const config = require("./config/env.config");
const express = require("express");
const bodyParser = require("body-parser");
const app = express();
const authRouter = require("./routes/auth.routes");
const userRouter = require("./routes/users.routes");
app.use(function(req,res,next){
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Credentials', 'true');
res.header('Access-Control-Allow-Methods',
'GET,HEAD,PUT,PATCH,POST,DELETE');
res.header('Access-Control-Expose-Headers', 'Content-Length');
res.header('Access-Control-Allow-Headers', 'Accept, Authorization,
Content-Type, X-Requested-With, Range');
if (req.method === 'OPTIONS') {
return res.send(200);
} else {
return next();
}
});
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:true}));
authRouter.authRoutesConfig(app);
userRouter.userRoutesConfig(app);
app.listen(config.port, () => console.log(`Listening on port
${config.port}`));
authRoute 代码:
const verifyUserMiddle = require("../middlewares/verify.user.middle");
const authController = require("../controllers/auth.controller");
exports.authRoutesConfig = function (app) {
app.post('/auth', [
verifyUserMiddle.hasAuthValidFields(),
verifyUserMiddle.isPasswordAndUserMatch(),
authController.login()
])
}
Controller 代码:
const jwtSecret = require('../config/env.config').jwt_secret,
jwt = require("jsonwebtoken");
const cyrpto = require("crypto");
exports.login = (req, res) => {
try {
let refreshId = req.body.userId + jwtSecret;
let salt = crypto.randomBytes(16).toString("base64");
let hash = cyrpto.createHmac("sha512",
salt).update(refreshId).digest("base64");
req.body.refreshKey = salt;
let token = jwt.sign(req.body, jwtSecret);
let b = new Buffer(hash);
let refresh_token = b.toString("base64");
res.status(201).send({accessToken: token, refresh_token:
refresh_token});
}catch(err){
res.status(500).send({errors: err});
}
}
由于用户部分工作正常,我认为授权也可以,但事实并非如此。中间件似乎在 body-parser 之前被调用。错误首先发生在中间件中。
最佳答案
这里不是正文解析器问题 - 它工作正常。如您所见,您的 exports.login = (req, res) => {...}
具有 req
和 res
参数,但是如何他们收到了吗?
在您的 authController.login()
中使用 parantheses() 可以防止这种情况发生,只要它们存在,您的应用就会崩溃并出现此类错误。
所以改成这样:
app.post('/auth', [
(your code),
authController.login
])
没有括号。
关于node.js - 如何在 expressjs REST API 中修复 "TypeError: Cannot read property ' 正文“未定义””,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56640654/
基于此答案的问题:https://stackoverflow.com/a/18650183/4478897 我试图找到这个解决方案,但似乎没有任何效果符合我的需要。 集群 expressjs 和 so
我有一个使用 Sequelize.js 作为 ORM 运行的快速应用程序。我的 express 应用程序从我的主要 Rails 应用程序接收请求,并且由于跨域策略,这些请求是使用 getJSON 执行
如何处理同步错误并保证在同一代码中出现错误? 这是我的代码,但不确定其工作正常,有什么想法吗? helpers.list({ limit: 1 })
在我的 ExpressJS 代码中,我限制主体大小如下: app.use(bodyParser.urlencoded({ limit : "512kb", extended: fals
我有一个看起来像这样的对象: editinvite: { _id: '', title: '', codes_list: [] } 问题是我无法在 NodeJS 应用程序中访问codes_
我正在尝试让我的nodeapp 使用express 工作。 我已经通过 nginx 设置了反向代理以使用 https://dank.ml/api/v1但每当我启动我的应用程序时,它都不想检测 / 响应
我完全失去了理智: 我有一个快速应用程序:以下是此示例的几个文件的快照: 应用程序.js -模型 --Event.js --Match.js 路线 --matches.js app.js: globa
我有我的nodejs项目,我想将记录器与我的route.js分开以获得干净的代码。 但是我遇到了下一个问题,当我尝试将记录器加载到route.js 文件时,它会显示下一个错误: TypeError:
我在 MEAN 应用程序中的模板缓存方面遇到一些困难。我有一个导航栏,它使用条件逻辑来显示/隐藏向用户显示的按钮。当用户点击页面时,这些值将被设置为 null 或 false,但是一旦他们登录,这些值
是否可以根据可选路线创建不同的查询? app.get('/:genre/:book?', function (req, res) { var genre = req.params.genre; v
我正在尝试学习 ExpressJS,并且遇到了这段代码。我似乎无法理解 app.use 函数,并且文档对我来说也不清楚。当调用 app.use 时,此特定示例代码中的/public 目录到底发生了什么
我正在开发一个学校管理系统。当老师发送发布请求时,我在后端创建一个路由内的全局对象。所以当多个老师访问服务器时,会创建多个全局对象......或者每个老师访问同一个对象?(会被重写同一个对象吗?) 最
我有一个用 typescript 编写的小型微服务,在 AKS 上的 kubernetes 集群中运行。我使用 Helm 生成了入口 apiVersion: extensions/v1beta1 ki
我需要将 JSON 发送到我的服务器,但 POST 请求显示为空正文。这是我在前端的 typescript : function sendData() : void { console.log("Se
这是我的 app.js import path from 'path'; import bodyParser from 'body-parser'; import express from 'expr
我一直在使用 ExpressJS 来促进文件上传,但据我所知,您可以将文件上传到任何路由,无论它是否处理它。 说我有 app.post('/photos/upload', photos.upload)
我正在阅读 Express.JS 4.x API,并且很好奇他们是如何设置的。这是我对正在发生的事情的理解:在 Express.JS 4.x API 的示例代码中,express 模块被导入并分配给变
我有以下注册页面 form(method='post', action='users/register') .form-group label Name inp
我有诸如 :id/comments/、:id/otherRoute 等路线。对于这些路线,我需要创建新的 Controller 。例如: let id: number = +req.params["i
嘿,我有一个使用 Express.js 和 Handlebars 运行的网站,该网站的导航栏和侧边栏在所有页面上都保持相同。当我路由时,它仅更改页面容器 {{{body}}}。 有没有一种方法可以让我
我是一名优秀的程序员,十分优秀!