req.params.userId 未找到 ( 路径设置为 /:userId) Node.js.



我想通过他的userId参数获取用户,但它不起作用。该应用程序连接到数据库(Atlas(,我可以创建用户,批量检索它们,但我无法使用特定参数(在本例中为 UserId(检索它们,从而产生未找到错误消息。

用户路由.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);
}
});

用户型号.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...')});

这是邮递员的要求:

邮递员获取用户ID

您的请求是错误的。您将路径定义为:

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

因此,请求 URL 应为:

/getusersById/3

而不是

/getusersById/?userId=3
'/getusersById/:userId'

您在这里执行的是请求的参数,这是userId

此 API 的正确用法是/getusersById/3

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

但是,您似乎想使用?usersId=3来查询用户ID

您需要使用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

我认为您是API开发的新手。从图像中我可以看到您正在将 userId 作为查询参数发送。但是在代码中,您正在执行用于路径参数的req.parms.userId。在代码中,您定义了路径参数的路由,因此请求应如下所示:

/getusersById/3

并按以下方式处理

app.get('/getusersById/:userId', 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 );

阅读此内容:查询与路径参数

最新更新