【问题标题】:node.js express router.post gives 404node.js express router.post 给出 404
【发布时间】:2017-02-16 12:25:02
【问题描述】:

我有一个非常简单的 node.js 应用程序,它应该通过 REST 接口控制一些 LED。有些页面会显示某些信息 - 这些是从哈巴狗模板创建的。其他一些 REST 端点应打开或关闭 LED。

我的问题是我可以使用 get 返回一个 html 网站,但我无法通过 post 执行功能。

这是我的代码:

var express = require('express');
var router = express.Router();
var led = require('../public/javascripts/driveredled');

/* GET Red LED page. */
router.get('/', function(req, res, next) {
  res.render('oneled', { title: 'Red LED' });
});

// base path is already set as being /leds/{color}
router.post('/on', function(req, res) {
  led.turnledon();
});

// base path is already set as being /leds/{color}
router.post('/off', function(req, res) {
  led.turnledoff();
});

// base path is already set as being /leds/{color}
router.post('/blink', function(req, res) {
  led.blinkled();
});

module.exports = router;

这是日志输出:

sudo npm start
> ledconodel@0.1.0 start /data/shared/Developing/ledconodel
> node ./bin/www

Listening on port port 3000
GET /leds/blue/ 200 2291.133 ms - -
GET /leds/blue/ 304 229.306 ms - -
GET /stylesheets/style.css 304 11.105 ms - -
GET /leds/blue/on 404 328.030 ms - 1155

可以看出,html页面(通过pug动态创建)正确返回,但是到端点on的post命令却没有。

我对 node.js 非常陌生,表达和相关的概念,所以我比较卡在这里。

谁能帮忙?

亲切的问候,

克里斯

【问题讨论】:

  • 从您的输出中可以看出,您似乎正在向/on 发出 GET 请求,而不是 POST 请求。
  • 这是因为您尝试使用 GET 而不是 POST 访问端点。
  • 那是因为在发出 post 请求时您没有返回任何内容。做类似router.post('/on', function(req, res) { led.turnledon(); res.json({ status: 'success' }); });

标签: javascript node.js express routes


【解决方案1】:
GET /leds/blue/on 404 328.030 ms - 1155

从日志输出看来,您调用的是 GET,而不是 POST。而且由于您没有在 /on 上下文中公开 GET,因此您将得到 404。

能否请您发布一下您是如何调用服务的。

【讨论】:

  • 您好,感谢您的回复。我将代码从 post 更改为 get,但现在出现 500 错误,如下所示: GET /leds/red/on 500 104.539 ms - 1250 GET /stylesheets/style.css 304 1.881 ms - - GET /leds/red/on 500 88.065 毫秒 - 1250 获取 /stylesheets/style.css 304 18.859 毫秒 - -
【解决方案2】:

当您尝试访问特定路线时,例如。 /on,你的浏览器默认使用GET方法来路由..所以你会得到一个404错误

使用Postman等其他软件模拟POST方法as shown in this pic

【讨论】:

  • 非常感谢。由于我只尝试打开和关闭 LED,因此我决定将命令从 post 更改为 get。但是现在我遇到了 500 错误:-(
  • 500 表示“内部服务器错误”您的代码可能存在问题,因此请检查您的路由是否有效.. 在回调中添加console.log("Testing");.. 并对其进行测试。
  • 现在在我的网站上非常好:-) 一切都按预期工作。我的功能(打开 LED)没有被导出,导致 500
猜你喜欢
  • 1970-01-01
  • 2016-11-05
  • 1970-01-01
  • 1970-01-01
  • 2021-08-24
  • 1970-01-01
  • 2013-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多