【问题标题】:Both POST/GET requests yield a 404 error in Postman. Is my Express routing to blame?两个 POST/GET 请求都会在 Postman 中产生 404 错误。是我的 Express 路由问题吗?
【发布时间】:2019-07-10 21:57:59
【问题描述】:

我打算用 MongoDB 设置一个 Node.js 服务器来处理 HTTP CRUD 请求。在设置我的端点后,我最初能够接收 POST/GET 请求,但是文档对象的处理成为问题。在尝试解决此问题时,我现在根本无法发布/获取?这仅仅是一个语法问题还是我的代码注定要失败?

const MongoClient = require('mongodb').MongoClient;
var QRCode = require('qrcode');
var canvasu = require('canvas');
var express = require('express');
var mongoose = require('mongoose')
var app = express();
var port = process.env.PORT || 3000;
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
var db;
var collection
var Patient = require('./ShiftAssist/models/patientModel');
var router = express.Router();

'' 连接代码 ''

router.get('/patients/:Pnum', function(req,res,next){    
    Patient.findOne({Pnum:req.params.Pnum},function(err,patient){
    if (err) return next(err);
    res.json(patient);
    })
});

app.use('/', router);

app.listen(3000, function () {
    console.log('Example app listening on port ' + port + '!');
});

预期:使用文档标识符对http://127.0.0.1:3000/patients/XXXXXX 的 GET 请求,返回整个文档

实际:超时错误

【问题讨论】:

  • GET http://127.0.0.1:3000/patients/XXXXXX 将匹配您的路由器 /patients/:Pnum
  • 不太清楚你的意思。我尝试了 GET 127.0.0.1:3000/patients/XXXXXX127.0.0.1:3000/patients/?Pnum=XXXXXX 并且都产生了 404
  • @CalvinWoo 欢迎来到 Stackoverflow。该帖子表明请求发送到/patients?Pnum=... 作为查询字符串。
  • @CalvinWoo 您更新的评论表明也尝试了正确的路线。另一件突出的事情是路径是在router 上定义的,而不是在app 上。
  • @CalvinWoo 你确定你的router 变量已经被使用了吗?像这样app.use('/', router);

标签: node.js mongodb express postman mean-stack


【解决方案1】:

尝试通过/patients/:Pnum 更改您的路线 你的请求应该是http://127.0.0.1:3000/patients/XXXXXX

来源:https://expressjs.com/en/guide/routing.html

编辑:到目前为止我使用的代码

var express = require('express');
var app = express();
var router = express.Router();

router.get('/patients/:Pnum', function (req, res, next) {
    setTimeout(() => res.json({ ok: req.params.Pnum }), 1000)
});

app.use('/', router);

app.listen(3000);

【讨论】:

  • 路线已经正确。监督确实存在于请求本身中。该参数以/:Pnum 的形式包含在路径中。将其作为?Pnum=... 添加到请求查询字符串中会失败,因为它将请求发送到/patients,这是一条非常不同的路线。
  • 已尝试更改路线,但 404 问题仍然存在。
  • @Boaz 我不太清楚你的意思。我应该如何格式化查询?
  • 我看到你在使用路由器,你写了app.use 使用它吗?
  • @ConstantinGuidon 这似乎是问题之一,代码已更新。但是现在请求似乎超时了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-24
  • 1970-01-01
  • 2022-01-13
  • 2020-10-07
  • 2015-12-31
  • 1970-01-01
  • 2021-04-23
相关资源
最近更新 更多