【问题标题】:POST Route to END RoutePOST Route 到 END Route
【发布时间】:2018-09-05 22:30:42
【问题描述】:

我正在构建一个 Node.JS 网站,需要将我当前的 GET 路由更改为 POST 路由。如何成功进行转换。我当前的错误是 'Cannot GET /' 然后我需要让 POST Route 命中 GET 路由。

const express = require('express');
const path = require('path');
const hbs = require('express-handlebars');

// Moment.js
var moment = require('moment');

// Init App
const app = express();

// Json File
const json = require("./data.json");

// Javascript Files
const welcomeTime = require('./public/javascript/welcomeTime');

// Load View Engine
app.engine('hbs', hbs({extname: 'hbs', defaultLayout: 'layout', 
layoutsDir: __dirname + '/views/layouts/'}));
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');
app.use(express.static(__dirname+'/public'));

// GET Route
// app.get('/', function(req, res){
//     res.render('index', {
//         title: 'NodePark',
//         hotel: 'NodePark',
//         firstName: json.payload.data.Source_FirstName,
//         lastname: json.payload.data.Source_LastName,
//         date: moment().format('ll'),
//         time: moment().format('LT'),
//         currentHour: welcomeTime.dayTime()
//     });
// });

// POST Route
app.post('/', function(req, res){
    res.render('index', {
        title: 'NodePark',
        hotel: 'NodePark',
        firstName: json.payload.data.Source_FirstName,
        lastname: json.payload.data.Source_LastName,
        date: moment().format('ll'),
        time: moment().format('LT'),
        currentHour: welcomeTime.dayTime()
    });
});

// Start Server
app.listen(5000, function(){
    console.log('Port 5000 open for business.');
});

我已经包含了我的工作 GET 路线和 POST 路线的尝试。我不明白为什么它不起作用。

layout.hbs 在下面

<!doctype HTML>
<html lang="en">
<head>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta charset="UTF-8">
    <title>{{ title }}</title>
    <link href="https://fonts.googleapis.com/css?family=Fanwood+Text:400i" rel="stylesheet">        
    <link href="https://fonts.googleapis.com/css?family=Lora" rel="stylesheet">
    <link rel="stylesheet" href="/stylesheets/style.css">
    <style>li span { position: relative; left: -8px; }</style>
</head>
<body>
    {{{ body }}}
</body>
</html>

index.hbs 在下面

    <div id="body-container">
    <div id="header">
        <div id="logo-content">
            <div id="logo"></div>
        </div>
        <div id="welcome">
            <p>Good {{ currentHour }} {{ firstName }} {{ lastname }}. We hope your stay is comfortable & relaxing.</p>
        </div>
        </div>
        {{!-- <div id="time-side">
            <div id="time-content">
                <p> {{ date }} <br> {{ time }} </p>
            </div>
        </div> --}}
    </div> 
    {{!-- end of header --}}

    <div id="background">
        <img src="images/villaView.jpg" alt="villaView">
    </div>

    <div id="footer">
        <p> <br> &copy; 2018 NodePark </p>
    </div>

我的目标是创建一个从 POST 路由到 GET 路由的端点。

【问题讨论】:

  • 所以您想将传入的请求从 POST 转换为 GET?
  • 具体来说,我需要一个 POST 到 GET 的 IoT。我猜这是转换请求。

标签: node.js rest express post handlebars.js


【解决方案1】:

在您的帖子处理程序中,调用res.redirect("&lt;new-url&gt;") 将用户重定向到&lt;new-url&gt;

// POST Route
app.post('/', function(req, res){
    // store the incoming data somewhere, e.g. in a cookie-based session
    res.redirect('/');
});

// GET Route
app.get('/', function(req, res){
    // retrieve the posted data from somewhere, e.g. from a cookie-based session
    res.render('index', { ... });
});

【讨论】:

  • 难道它仍然是一个 POST 吗?
  • 用户说“需要将我当前的 GET 路由更改为 POST 路由”,所以我假设他想先发出 POST 请求,然后重定向到同一页面以通过 GET 处理程序.也许我理解错了?
  • 另外,问题的最后一点:“我的目标是创建一个从 POST 路由到 GET 路由的端点。”可能是让我感到困惑的原因。
  • 很抱歉给您带来了困惑。为了让我的 IoT 服务正常工作,我首先需要一个 POST 路由。你一开始是对的,我需要一个 POST 到 GET 路由。
  • 我现在正在启动一个小型快速项目来测试一些东西,但是你能非常清楚你所说的“POST to GET”是什么意思吗?您是否正在向 POST 发送有效负载?当它到达 GET 时会发生什么?为什么你还需要 GET 呢?你不能只从 POST 请求中返回信息吗?
猜你喜欢
  • 2021-11-25
  • 2019-06-14
  • 2017-07-30
  • 1970-01-01
  • 2018-11-11
  • 2020-08-15
  • 1970-01-01
  • 2014-06-23
  • 2018-11-11
相关资源
最近更新 更多