req.params.userId не найден (путь установлен в /: userId) Node.js - PullRequest
0 голосов
/ 14 января 2020

Я хочу получить пользователя по его параметру userId , но он не работает. Приложение подключается к базе данных (Atlas), я могу создавать пользователей, извлекать их всех оптом, но не могу получить их с указанным параметром c (в данном случае UserId), что приводит к сообщению об ошибке «not found».

UserRoutes. js

const express = require('express');
const UserModel = require('../models/UserModel');
const app = express();

app.get('/getusersById/:userId', async (req, res) => {

const user = await UserModel.find(req.params.userId);

try {
res.send(user);
} catch (err) {
res.status(500).send(err);
}
});

UserModel. js

const mongoose = require('mongoose');

// Define Schema
const UserSchema = new mongoose.Schema({
name: {
type: String,
required: true,
trim: true,
},

age: {
    type:Number,
    required:true
  },

userId: {
    type:String,
    required:true
  },
});


//
const User = mongoose.model('user', UserSchema);
module.exports = User;

Сервер. js

// Open connection to test database

const express = require('express');
const mongoose = require('mongoose');
const UserRouter = require('./routes/UserRoutes.js');

const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

const uri = "mongodb+srv://XXXXXXXXXXX@XXXXXXXeXXXX.gcp.mongodb.net/dbusers?retryWrites=true&w=majority";

mongoose.connect(uri,{
userNewUrlParser: true,
useUnifiedTopology: true
});

// Notify if connection was succesful

var db = mongoose.connection;
db.on ('error', console.error.bind(console, 'connection error'));
db.once('open', function() {

console.log("Connection Succesful");

});
db.on('close', () => {
db.removeAllListeners();
});

// Router & Port

app.use(UserRouter);
app.listen(3000,
() => {console.log('Server is running...')});

И это запрос почтальона:

Почтальон получает идентификатор пользователя

Ответы [ 3 ]

1 голос
/ 14 января 2020

Ваш запрос неверен. Вы определили свой путь как:

app.get('/getusersById/:userId', /* callback */)

Таким образом, URL запроса должен быть:

/getusersById/3

, а не

/getusersById/?userId=3
1 голос
/ 14 января 2020
'/getusersById/:userId'

Что вы делаете здесь, это параметры вашего запроса, который userId

правильное использование этого API составляет /getusersById/3

app.get('/getusersById/:usersId', async (req, res) => {

const user = await UserModel.find(req.params.usersId );

Однако кажется, что вы хотите использовать ?usersId=3 для запроса идентификатора пользователя

Вам нужно использовать req.query.usersId

app.get('/getusersById', async (req, res) => {

const user = await UserModel.find(req.query.usersId );

Вы можете найти примеры использования запроса: https://coderrocketfuel.com/article/handle-get-request-query-string-parameters-in-express-js

1 голос
/ 14 января 2020

Я думаю, что вы новичок в разработке API. Из изображения, которое я вижу, вы отправляете userId в качестве параметра запроса. Но в коде вы делаете req.parms.userId, который используется для параметров пути. В вашем коде вы определили маршрут для параметра path, поэтому запрос должен выглядеть следующим образом:

/getusersById/3

И обрабатываться, как показано ниже

 app.get('/getusersById', async (req, res) => {
 const user = await UserModel.find(req.params.userId );

Однако, если вы хотите передать userId в Затем запросите параметр запроса:

app.get('/getusersById', ...)

запрос может быть выполнен следующим образом:

/getusersById/?userId=3

и параметр запроса будет доступен, как показано ниже:

 app.get('/getusersById', async (req, res) => {
 const user = await UserModel.find(req.query.userId );

Прочитайте это: запрос против параметров пути

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...