【问题标题】:How to create a POST End point for a GET End point?如何为 GET 端点创建 POST 端点?
【发布时间】:2018-09-07 14:07:52
【问题描述】:

我正在尝试创建一个 Node.JS 网站,但我需要创建两个端点才能让我的 IOT 正常工作。目标是创建两个端点,一个 POST 端点,它在其中检索 GET 端点的 JSON 数据,以便在欢迎页面上加载预订的名字和姓氏。我怎样才能做到这一点?

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',

        // This woould be the json data I need from the payload
        firstName: json.payload.data.Source_FirstName,
        lastname: json.payload.data.Source_LastName,
        // end of data needed

        date: moment().format('ll'),
        time: moment().format('LT'),
        currentHour: welcomeTime.dayTime()
    });
 });

// POST Route
app.post('/hotel', function(req, res){
    res.redirect('/', {
    });
});

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

【问题讨论】:

  • 让我看看我是否理解正确。您的页面最初是通过 .get('/') 路由呈现的。在该页面加载后,您希望在将来的某个时间将预订数据发布到该页面?或者您只是尝试最初呈现来自./data.json 的数据??
  • 最初它渲染了 .get('/') 路由,但我需要它首先创建一个 POST 端点,在该端点中检索 GET 路由的 json 数据以刷新或加载信息包含信息的页面。我从来没有这样做过,我不知道如何解决这个问题。是不是更清楚了?
  • 您从哪里获取数据,来自用户还是其他地方?

标签: json node.js rest express endpoint


【解决方案1】:

老实说,不是 100% 确定您要在这里实现什么。但我会试一试。

听起来您有想要从 get 和 post 路由中检索的数据。只需将该数据放入一个函数中,然后从您的两个路由中调用该函数。但是我会说,如果您有一个“POST”端点,它只是从您的“GET”端点检索数据,我会严重质疑您为什么要从“POSTING”开始。您没有创建任何新资源或任何东西。

无论如何,这是我所说的一个例子。

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

// Moment.js
const 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`));

const getMyData = () => ({
  title: 'NodePark',
  hotel: 'NodePark',

  // This woould be the json data I need from the payload
  firstName: json.payload.data.Source_FirstName,
  lastname:  json.payload.data.Source_LastName,
  // end of data needed

  date:        moment().format('ll'),
  time:        moment().format('LT'),
  currentHour: welcomeTime.dayTime()
});

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

// POST Route
app.post('/hotel', (req, res) => {
  const theData = getMyData(); // use it here???  I have no idea....
  res.redirect('/', {
  });
});

// Start Server
app.listen(5000, () => {
  console.log('Port 5000 LIVE.');
});

【讨论】:

  • 首先,感谢您的帮助,非常感谢。但我认为我的措辞不清楚,因为我也有点困惑。我需要创建一个 POST 端点来检索数据(本例为 json 名字和姓氏)。然后我将该数据传递给我的 GET Route,以便它可以在显示器上显示名字和姓氏。你是说为什么我首先需要一条 GET 路线?我的合作伙伴说他需要一个 POST 端点才能使 IOT 服务正常工作。
  • A POST 检索 (GET) 数据的请求没有意义。 @FreshOceans
猜你喜欢
  • 1970-01-01
  • 2012-12-30
  • 2021-07-28
  • 1970-01-01
  • 1970-01-01
  • 2018-01-11
  • 2019-11-05
  • 1970-01-01
  • 2019-12-16
相关资源
最近更新 更多