首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >req.body在POST上是空的,但是日志记录req显示req.body存在

req.body在POST上是空的,但是日志记录req显示req.body存在
EN

Stack Overflow用户
提问于 2020-03-12 04:02:20
回答 2查看 215关注 0票数 1

我的问题

我正在尝试用node.js编写一个注册/登录页面,使用express.js。我已经决定将路由和应用程序初始化分成两个文件。当我用数据localhost:3000/register{"username":"xyz","password":"xyz"}发送POST请求时,request对象具有属性主体。然而,当我试图访问这个属性时,我会得到未定义的。

我现在的代码

代码语言:javascript
复制
// app.js
// Load express and define port
const express = require('express');
const app = express();
const port = 3000;
// App Configurations
app.use(express.json())
// Load Routes
var registerRouter = require('./controllers/register.js');
// Use Routes
app.use('/register', registerRouter);
// Start App
app.listen(port, () => console.log(`Example app listening on port ${port}!`));
代码语言:javascript
复制
// controllers/register.js
// requires
var argon2i = require('argon2-ffi').argon2i;
var bodyParser = require('body-parser');
var {Database, Model} = require('mongorito');
var crypto = require('crypto')
var Promise = require('bluebird');
var randomBytes = Promise.promisify(crypto.randomBytes);
var express = require('express');
// define router
var router = express.Router();
// Mongo Connection
const db = new Database('localhost/test', { 
    reconnectTries: 5 
});
// Models
class User extends Model {}
// Register Models
db.register(User);
// Routes
router.post('/', async (res, req) => {
    console.log(req.body);
    if(!req.body) return req.sendStatus(400); 
    const username = req.body.username;
    const salt = randomBytes(32); 
    const password = argon2i.hash(req.body.password, salt);
    var user = new User({
        username: username,
        password: password,
        salt: salt
    });
    await user.save;
    res.send("User Created");
});
// Disconnect From Database
db.disconnect;
//export router
module.exports = router;

我的预期结果

我希望能够访问req.bodyreq.body.username

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-12 04:18:48

代码中有一个小问题。router.post回调函数第一个参数是req,第二个参数是resCallback function参数是固定的,不命名的参数。

您正在尝试获取response object上的主体,尽管参数的名称是req,但它仍然保存着response object。这就是问题的根源。

请换一下。

错误:

代码语言:javascript
复制
router.post('/', async (res, req) => {

更正:

代码语言:javascript
复制
router.post('/', async (req, res) => {
票数 1
EN

Stack Overflow用户

发布于 2020-03-12 04:25:16

我看到您正在控制器/寄存器中导入bodyParser,但没有设置它,至少在这个片段中是这样的。如果您没有任何特殊的理由把它放在控制器中,那么就这样做吧。

代码语言:javascript
复制
// app.js
// Load express and define port
const express = require('express');
const bodyParser = require('body-parser'); // new code

const app = express();
app.use(bodyParser.urlencoded({ extended: true })); // new code
const port = 3000;
// App Configurations
app.use(express.json())
// Load Routes
var registerRouter = require('./controllers/register.js');
// Use Routes
app.use('/register', registerRouter);
// Start App
app.listen(port, () => console.log(`Example app listening on port ${port}!`));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60647472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档