首页 > 解决方案 > nodejs post方法没有被调用

问题描述

我发现我的问题是一年前在这里提出的app.post() 不适用于 Express但那里编写的代码已经过时(添加 bodyparser 的方式以及下面提到的功能不再起作用)加上提问者从未选择过回答所以问题从未解决。

这是我的代码

const express = require("express");
const db = require("mysql");
const app = express();
const bodyParser = require("body-parser");
const multer = require("multer"); // v1.0.5
const upload = multer(); // for parsing multipart/form-data
const http = require("http");
const path = require("path");
app.set("view engine", "jade");
app.set("views", path.join(__dirname));
console.log("before");
app.listen(8000, () => {
  console.log("Server started!");
  console.log("within");
});
console.log("after");
app.use(bodyParser.json()); // for parsing application/json
app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded

app.post("/", function(req, res) {
  console.log("hit here in post");
  res.render("index.jade", {});
  console.log("hit here in post");
  res.json({ name: "John" });
  res.status(500).json({ error: "message" });
  res.end();
});
app.get("/", function(req, res) {
  res.render("index.jade", {});
  console.log("hit here in get");
  console.log(req.body);
});

这是输出。

before
after
Server started!
within
hit here in get
{}

我什至尝试像其他问题的提问者一样将应用程序集和使用包装在 app.configure 中,以查看这是否是问题所在,但该配置功能似乎不再存在,因为我收到了一个错误。

我也应该注意。我这里的路由是正确的。我还没有创建视图子文件夹,所以这就是我按原样编写它的原因。

更新

我想我可能已经发现了这个问题,但我不明白它为什么会发生。在浏览器的网络选项卡中,我看到 GET 由于 favicon.ico 请求而出现 404 错误,但我不明白该请求来自何处。我已经看到 serve-favicon npm 模块来支持它,但不想添加,因为我从未打算将 favicon 图像添加到我的服务器。我什至不明白那将如何工作。

回复 James 的最后一条评论, 我在启动后配置中间件是什么意思?您是指 post 方法是在端口侦听开始后编写的吗?另外,如果这就是 post 不执行的原因,那么 get 方法怎么会执行呢?除了我目前已经注释掉的代码之外,我不会保留任何服务器代码,但我发布的代码是我的主要 index.js 文件,它是我从标准 npm init 项目修改的唯一文件。我没有设置任何路由,因为我认为没有必要这样做(即使我添加了 react,因为我的项目在 reactjs、nodejs 和数据库之间的通信概念上很简单,“因此我很沮丧”)这就是为什么我'我试图让 get 和 post 只访问根目录。

标签: node.js

解决方案


favicon 由浏览器自动请求。它是浏览器选项卡或 url 地址栏中使用的图标

在 app.get() 之前添加这个:

app.all('/', function(req, res, next) {
   console.log({method: req.method, url: req.url});
   next();
});

推荐阅读