【问题标题】:Why is my node express route not found?为什么找不到我的节点快速路由?
【发布时间】:2017-10-21 20:59:38
【问题描述】:

我正在尝试在我的 node express 应用中添加到“/signup”的路由。 '/' 的 GET 正在工作,但 '/signup' 给出了 404 未找到。

index.js 和 signup.js 都在根文件夹中。

signup.hbs 和 index.hbs 都在我的视图文件夹中。

index.js:

const express = require('express');
const engines = require('consolidate');
var signup = require('./signup');

const app = express();
app.engine('hbs', engines.handlebars);
app.set('views', './views');
app.set('view engine', 'hbs');

app.get('/', (req, res) => {
    res.render('index');
});

app.use('/signup', signup);

signup.js

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

router.get('/', function (req, res) {
    res.render('signup', {text:"Send some text to template here"});
});

module.exports = router;

index.hbs 中的链接(导致 404 未找到):

<a style="font-weight:bold; text-decoration:none;" href="/signup">Sign up</a>

【问题讨论】:

  • 已经尝试在声明if (err) { throw err; } 之后在function 中添加您的res.render 并在结束if throw err 之后执行res.render

标签: javascript node.js express routes


【解决方案1】:

node.js 中的模块默认是单例的,因此不需要多次加载一个模块。 如果您想将 index.js 视为将加载 express.js 的文件,请考虑导出您已定义的 express 变量并在 signup.js 中导入 index.js。

index.js

const express = require('express');
const app = express();
...
module.exports{
    app
}

signup.js

const index = require('./index');
...
const router = index.app.Router();

另外,您对app.use 的使用似乎有点不对劲。你应该提供一个路由器、一个快速应用程序或制作你自己的中间件,而你只是发送一个模块(signup.js)。你可以在这里阅读更多信息:https://expressjs.com/en/4x/api.html#middleware-callback-function-examples

【讨论】:

  • 以前我的 index.js 以:exports.app = functions.https.onRequest(app); 结尾。我尝试使用上面概述的 module.exports 进行修改,但 index.app.Router 返回“无法读取未定义的属性路由器”。
  • 我刚刚检查过,在没有渲染视图的情况下,您的路由工作正常(我只是发送了一些对象)。因此,问题可能在于定位视图。假设view 文件夹位于根文件夹中,您可以试试这个:app.set('views', path.join(__dirname, 'views')); 祝你好运!
【解决方案2】:
var express = require('express');
var router = express.Router();

 router.post('/', function (req, res) {
   res.render('signup', {OCR:"OCR TEXT"});
 });

module.exports = router;

服务器没有找到合适的方法调用,所以它正在发送您的 404 页面。

你必须在你的路由上使用 POST 方法,如果你要向服务器发送一些数据

【讨论】:

  • 我实际上并没有就这个请求发送任何数据。我只是想做一个 GET 请求将用户带到注册页面。我假设 执行 GET 请求。
  • 常规链接确实会触发 GET 请求。
猜你喜欢
  • 1970-01-01
  • 2015-06-03
  • 2014-11-19
  • 1970-01-01
  • 2020-03-27
  • 2022-01-15
  • 2020-12-11
  • 2018-11-06
  • 1970-01-01
相关资源
最近更新 更多