我想通过他的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 );
阅读此内容:查询与路径参数