【问题标题】:How to change data from API by changing the parameters in URL ? Restfull API on javascript?如何通过更改 URL 中的参数来更改 API 中的数据? javascript上的Restful API?
【发布时间】:2019-10-22 07:58:20
【问题描述】:

我设置了一个斜线端点。

我想在用户输入时这样做: http/website.com/date=2019-08-01&station=41027&daysForward=5

可以改变三个参数来获得不同的数据。

date="第一个参数"

station="第二个参数"

daysForward="第三个参数"

var express = require("express")
var app = express()
var mysql = require('mysql')

// Server port

var HTTP_PORT = 8000;
// Start server
app.listen(HTTP_PORT, () => {
    console.log("Server running on port %PORT%".replace("%PORT%",HTTP_PORT))
});

var con = mysql.createConnection({
    host: "192.168.0.1",
    port: "3333",
    user: "username",
    password: "pass"
});

con.connect(function(err) {
    if (err) throw err;
});

let selectCustomers = function (query, cb) {
    let aladinModel = '';
    if (query.date && query.station && query.daysForward) {
        con.query(`CALL aladin_surfex.Get_mod_cell_values_meteogram(${query.date},${query.station},${query.daysForward})`, function (err, result, fields) {
            if (err) throw err;
            console.log(result);
            aladinModel = result;
            return cb(aladinModel);
        });
    }
    else return cb(aladinModel);
};


// Root endpoint
app.get("/", (req, res, next) => {

selectCustomers(req.query, function (aladinModel) { res.json({aladinModel})

  const date = req.query.date;
  const station = req.query.station;
  const daysForward = req.query.daysForward;

  const query = `CALL aladin_surfex.Get_mod_cell_values_meteogram(${date}, ${station}, ${daysForward})`;
  con.query(query, function (err, result, fields) {
    if (err) throw err;
    aladinModel = result;
  });
  res.json({aladinModel})
});
app.use(function(req, res){
    res.status(404);
});

我收到了这个错误:

ReferenceError: aladinModel is not defined
    at app.get (C:\Users\Admin\node-express\server.js:54:13)
    at Layer.handle [as handle_request] (C:\Users\Admin\node-express\node_modules\express\lib\router\layer.js:95:5)
    at next (C:\Users\Admin\node-express\node_modules\express\lib\router\route.js:137:13)
    at Route.dispatch (C:\Users\Admin\node-express\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (C:\Users\Admin\node-express\node_modules\express\lib\router\layer.js:95:5)
    at C:\Users\Admin\node-express\node_modules\express\lib\router\index.js:281:22
    at Function.process_params (C:\Users\Admin\node-express\node_modules\express\lib\router\index.js:335:12)
    at next (C:\Users\Admin\node-express\node_modules\express\lib\router\index.js:275:10)
    at expressInit (C:\Users\Admin\node-express\node_modules\express\lib\middleware\init.js:40:5)
    at Layer.handle [as handle_request] (C:\Users\Admin\node-express\node_modules\express\lib\router\layer.js:95:5)

【问题讨论】:

  • 为什么你不做一个post api而不是在header中发送数据。总是尽量减少header的负载。你可以通过请求包的body发送数据。
  • 你能告诉我怎么做吗?
  • 您可能想使用 res.redirect?因为您无法从后端更改或删除客户端请求 URL。另一种解决方法是,一旦收到来自后端的响应,您可以在客户端删除/更新参数。

标签: javascript api restful-url


【解决方案1】:

使用以下代码:

// Create express app
var express = require("express")
var app = express()
var mysql = require('mysql')

var date = '';
var station = '';
var daysForward = '';

// Server port

var HTTP_PORT = 8000;
// Start server
app.listen(HTTP_PORT, () => {
    console.log("Server running on port %PORT%".replace("%PORT%",HTTP_PORT))
});

var con = mysql.createConnection({
    host: "192.168.0.1",
    port: "3306",
    user: "user",
    password: "password"
});

con.connect(function(err) {
    if (err) throw err;
});

let selectCustomers = function (query, cb) {
    let aladinModel = '';
    if (query.date && query.station && query.daysForward) {
        con.query(`CALL aladin_surfex.Get_mod_cell_values_meteogram(${query.date},${query.station},${query.daysForward})`, function (err, result, fields) {
            if (err) throw err;
            console.log(result);
            aladinModel = result;
            return cb(aladinModel);
        });
    }
    else return cb(aladinModel);
};


// Root endpoint
app.get("/", (req, res, next) => {
    selectCustomers(req.query, function (aladinModel) {
        res.json({aladinModel})
    });
});
app.use(function(req, res){
    res.status(404);
});

然后在浏览器中使用查询参数来传递日期、电台和daysForward,例如:

http://www.website.com?date=2019-08-01&station=41027&daysForward=5

【讨论】:

【解决方案2】:

您应该改用查询参数

http/website.com?date=2019-08-01&station=41027&daysForward=5

示例

app.get("/", (req, res, next) => {
  const date = req.query.date;
  const station = req.query.station;
  const daysForward = req.query.station;

  const query = `CALL aladin_surfex.Get_mod_cell_values_meteogram(${date}, ${station}, ${daysForward})`;
  con.query(query, function (err, result, fields) {
    if (err) throw err;
    aladinModel = result;
  });
  res.json({aladinModel})
});

此代码应该可以工作,但您应该将代码拆分为多个函数。您可能还必须为这些参数定义默认值。

【讨论】:

  • 您可以像这样访问代码中的参数:req.query.date, req.query.station, req.query.daysForward
  • 你能告诉我示例或带有示例的 url 我不知道如何进行此更改吗?
猜你喜欢
  • 2016-01-08
  • 2019-04-14
  • 1970-01-01
  • 2018-03-09
  • 2022-08-22
  • 2022-11-21
  • 1970-01-01
  • 2015-04-15
  • 1970-01-01
相关资源
最近更新 更多