【问题标题】:Express.json() Not Working in version 4.17.1Express.json() 在版本 4.17.1 中不工作
【发布时间】:2021-05-27 14:16:56
【问题描述】:

我正在尝试学习 MEAN 堆栈,我只想执行 CURD 操作。但是当我将请求正文中的数据从角度发送到服务器时,我收到了一个空的请求正文。我不知道我哪里出错了。

这是我的代码

路线

router.post('/create-user', async (req, res) => {
  console.log(req.body);
  let { name, email, gender, mobile_no, password } = req.body;

  try {
    if (
      !(name && email && gender && mobile_no && password && password.length > 8)
    ) {
      throw new Error(
        `All fields are required name: ${name} , email: ${email} , gender: ${gender} , MobileNo: ${mobile_no} .Password length must be greater then 8 character`
      );
    }
    password = bcrypt.hashSync(password, parseInt(process.env.BCRYPT_SALT));

    // let response = await USER.create({ name, email, gender, mobile_no });
    const token = await jwt.sign(
      { name, email, mobile_no, user_id: response._id },
      process.env.JWT_KEY
    );

    response = response.toObject();
    response['token'] = token;

    res.status(200).json({ err: 0, message: 'User Created', response });
  } catch (error) {
    res.status(404).json({ err: 1, message: error.message, error });
  }
});

Index.js

const User = require('./Routes/user');

// Using middle ware
app.use(cors());
app.use(
  express.urlencoded({
    extended: true,
  })
);
app.use(express.json());

app.use('/user', User);

app.listen(PORT, () => console.log(`App started on http://localhost:${PORT}`));

Package.JSON

{
  "name": "backend",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "nodemon index.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "bcryptjs": "^2.4.3",
    "cors": "^2.8.5",
    "dotenv": "^9.0.2",
    "express": "^4.17.1",
    "jsonwebtoken": "^8.5.1",
    "mongoose": "^5.12.9"
  }
}

角度

 create_user(data) {
    return this.http.post(`${environment.BASE_URL}/user/create-user`, data, {
      headers: { 'Content-Type': 'application/json' },
    });
  }

  register_user() {
    const data = this.register_form.getRawValue();

    let aData = new FormData();
    aData.append('name', data.name);
    aData.append('email', data.email);
    aData.append('password', data.password);
    aData.append('image', this.image);
    aData.append('gender', 'Male');

    // this.store.dispatch(loading({ spinner: true }));
    this.user_service.create_user(aData).subscribe(
      (res) => {
        console.log(res);
        this.store.dispatch(loading({ spinner: false }));
      },
      (error) => console.log(error)
    );
  }

如果我在请求中设置了内容类型,则会收到错误消息。 这是将数据转换为 formdata 的正确方法吗?

http://localhost:4000/user/create-user 的 Http 失败响应:400 Bad Request

对不起,如果我犯了一些愚蠢的错误。我只是在学习

【问题讨论】:

  • 在发送到服务器之前管理您的数据

标签: javascript node.js angular express mean-stack


【解决方案1】:

试试这个方法:

item = {
     name: '', 
     email: '', 
     gender: '', 
     password: ''
   }
  formData.append('data', JSON.stringify(item));

在这样的快速访问数据中:

  let data = JSON.parse(req.body.data);

如果您的数据包含文件:

在 Angular 中:

formData.append('user_pic', uploadedFile, uploadedFile.name);

快递:

server.js:

const expressFileUpload = require("express-fileupload");
app.use(expressFileUpload());

在 route.js 中访问文件:

req.files.user_pic

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-23
    • 2016-04-04
    • 2015-06-25
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多