Req.body适用于POST req,但不适用于GET req。使用身体分析器

时间:2019-08-08 22:02:35

标签: node.js mongodb express mongoose

我能够在POST请求中使用req.body将数据存储在mongoDB数据库中,但是我无法在GET请求中使用req.body检索该数据。如果传递字符串但不能传递req.body,则可以检索数据。 我已经看到有很多关于此问题的文章,其中body解析器似乎可以解决该问题,但是即使我要使用body解析器,我仍在检索未定义的内容。

谢谢。

const express = require('express');
const app = express();
const mongoose = require('mongoose'); 
const path = require('path'); 
const bodyParser = require('body-parser'); 

const PORT = process.env.PORT || 2000;

// app.use(express.urlencoded({extended: true}));
app.use(bodyParser.urlencoded({ extended: false })); 
// app.use(express.json());
app.use(bodyParser.json()); 
app.use(express.static('public')); 


const database = mongoose.connect('mongodb://localhost/users')
.then(() => console.log('connected to mongoDB!!'))
.catch((err) => console.error('unable to connect', err)); 

const userSchema = {
    name: String,
    email: String
}
const User = mongoose.model('User', userSchema);

app.post('/api/users',(req,res) => {
    const user = new User({
        name: req.body.name,            
        email: req.body.email
    });
    const create = user.save(); 
    res.send('created a user account'); 
});

app.get('/api/users', async (req,res) => {
    const find = await User
    .find({ name: req.body.name});

    console.log(find); 
    res.send(`your data is ${req.body.name}`); 
})

app.listen(PORT, () => console.log(`listening on port ${PORT}`)); 

2 个答案:

答案 0 :(得分:1)

GET Resquest没有实体。相反,您需要使用查询参数。

您可以执行以下操作:

app.get('/api/users', async (req,res) => {
  const find = await User
  .find({ name: req.query.name});

  console.log(find); 
  res.send(`your data is ${req.query.name}`); 
})

答案 1 :(得分:1)

为补充Leandro Lima的回答, 路线参数:

.
├── electron
│   ├── electron.js
│   ├── electron.ts
│   ├── ipcEvents.js
│   ├── ipcEvents.ts
│   ├── messageSender.ts
│   ├── socketEvents.js
│   ├── socketEvents.ts
│   ├── Utils.ts
│   ├── windowEvents.js
│   └── windowEvents.ts
├── node_modules
├── package.json
├── package-lock.json
├── public
│   ├── favicon.ico
│   ├── index.html
│   └── manifest.json
├── src
│   ├── App.tsx
│   ├── index.css
│   ├── index.tsx
│   ├── react-app-env.d.ts
│   └── serviceWorker.ts
├── tsconfig.json

app.get('/api/users/:name', async (req,res) => { const find = await User .find({ name: req.params.name}); console.log(find); res.send(`your data is ${req.params.name}`); }) 部分组成.../:name(例如,req.params.name就是.../:id)。

对于查询参数:req.params.id
然后/api/users/Dave?sex=male&developer=yesreq.query,因此可以根据需要使用{sex: 'male', developer: 'yes'}req.query.sex

也请查看以下问题:Node.js: Difference between req.query[] and req.params