Express - GET API возвращает всегда 200 - PullRequest
0 голосов
/ 08 ноября 2019

Я написал GET API, который печатает переданный параметр:

exports.agency_information = (req, res, next) => {
  console.log({param: req.params.usercode});
};

, и это router:

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

const AgencyController = require('../controllers/agency');

router.get('/:usercode', AgencyController.agency_information);

module.exports = router;

Но я не понимаю, почему, когда явызовите api это всегда возвращает 200 OK, а в Почтальоне это возвращение:

<!doctype html>
<html lang="en">

<head>
    <meta charset="utf-8" />
    <link rel="icon" href="/favicon.ico" />
    <meta name="viewport" content="width=device-width,initial-scale=1" />
    <meta name="theme-color" content="#000000" />
    <meta name="description" content="Fare la constatazione amichevole non è mai stato così facile" />
    <link rel="apple-touch-icon" href="logo192.png" />
    <link rel="manifest" href="/manifest.json" />
    <title>ConstaFAST</title>
    <link href="/static/css/2.0624914a.chunk.css" rel="stylesheet">
    <link href="/static/css/main.02a2fc0a.chunk.css" rel="stylesheet">
</head>

<body><noscript>You need to enable JavaScript to run this app.</noscript>
    <div id="root"></div>
    <script>
        !function(i){function e(e){for(var r,t,n=e[0],o=e[1],u=e[2],l=0,f=[];l<n.length;l++)t=n[l],Object.prototype.hasOwnProperty.call(p,t)&&p[t]&&f.push(p[t][0]),p[t]=0;for(r in o)Object.prototype.hasOwnProperty.call(o,r)&&(i[r]=o[r]);for(s&&s(e);f.length;)f.shift()();return c.push.apply(c,u||[]),a()}function a(){for(var e,r=0;r<c.length;r++){for(var t=c[r],n=!0,o=1;o<t.length;o++){var u=t[o];0!==p[u]&&(n=!1)}n&&(c.splice(r--,1),e=l(l.s=t[0]))}return e}var t={},p={1:0},c=[];function l(e){if(t[e])return t[e].exports;var r=t[e]={i:e,l:!1,exports:{}};return i[e].call(r.exports,r,r.exports,l),r.l=!0,r.exports}l.m=i,l.c=t,l.d=function(e,r,t){l.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},l.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(r,e){if(1&e&&(r=l(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var t=Object.create(null);if(l.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var n in r)l.d(t,n,function(e){return r[e]}.bind(null,n));return t},l.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return l.d(r,"a",r),r},l.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},l.p="/";var r=this.webpackJsonpwww=this.webpackJsonpwww||[],n=r.push.bind(r);r.push=e,r=r.slice();for(var o=0;o<r.length;o++)e(r[o]);var s=n;a()}([])
    </script>
    <script src="/static/js/2.9ed2bde4.chunk.js"></script>
    <script src="/static/js/main.ea8659b8.chunk.js"></script>
</body>

</html>

С любым параметром или без него результат одинаков.

КОД СЕРВЕРА

const express = require('express');
const app = express();
const path = require('path');
const morgan = require('morgan');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
require('dotenv').config()

const agencyRoutes = require('./api/routes/agency');
const companyRoutes = require('./api/routes/company');

const port = process.env.PORT || 3000;

mongoose.connect(process.env.DB_CONNECT, {
  useCreateIndex: true,
  useNewUrlParser: true,
  useUnifiedTopology: true
}, () => console.log('Connect to the database'));

mongoose.Promise = global.Promise;

app.use(morgan('dev'));
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

app.use( (req, res, next) => {
  res.header('Access-Control-Allow-Origin', '*');
  res.header(
    'Access-Control-Allow-Headers',
    'Origin, X-Requested-With, Content-Type, Accept, Authorization'
  );

  if ( req.method === 'OPTIONS' ) {
    res.header('Access-Control-Allow-Methods', 'PUT, POST, PATCH, DELETE, GET');
    return res.status(200).json({});
  }

  next();
});

app.use(express.static(path.resolve(__dirname, '../www', 'build')));
app.get('*', (req, res) => {
  res.sendFile(path.resolve(__dirname, '../www', 'build', 'index.html'));
});

app.use('/api/agency', agencyRoutes);
app.use('/api/company', companyRoutes);

app.use( (req, res, next) => {
  const error = new Error('Not found');
  error.status = 404;
  next(error);
});

app.use( (error, req, res, next) => {
  res.status(error.status || 500);
  res.json({
    error: {
      message: error.message
    }
  });
});

app.listen(port, () => console.log(`Server up and running on port ${port}`));

Ответы [ 2 ]

1 голос
/ 08 ноября 2019

Прежде всего отправьте ответ с сервера.

exports.agency_information = (req, res, next) => {
    console.log({param: req.params.usercode});
    res.send('send something from server');
};

Теперь от почтальона позвоните вашему API

, например, используя этот

http://localhost:3000/api/agency/1234

Здесь выше: замените ваш номер порта на порт, на котором работает ваш сервер. И 1122 - это параметр, который вы отправляете, и он печатает в консоли.

Если это ваш маршрут по умолчанию, то он вызывается, и вы видите ответ в виде почтальона и параметр печатает в консоли.

ОБНОВЛЕНИЕ Ваш код SERVER перемещение API-маршрутов вверх app.get (*) должен быть последним. Вы получаете HTML-страницу в почтальоне из-за этого.

Вот обновленный код сервера

const express = require('express');
const app = express();
const path = require('path');
const morgan = require('morgan');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
require('dotenv').config()

const agencyRoutes = require('./api/routes/agency');
const companyRoutes = require('./api/routes/company');

const port = process.env.PORT || 3000;

mongoose.connect(process.env.DB_CONNECT, {
  useCreateIndex: true,
  useNewUrlParser: true,
  useUnifiedTopology: true
}, () => console.log('Connect to the database'));

mongoose.Promise = global.Promise;

app.use(morgan('dev'));
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

app.use( (req, res, next) => {
  res.header('Access-Control-Allow-Origin', '*');
  res.header(
    'Access-Control-Allow-Headers',
    'Origin, X-Requested-With, Content-Type, Accept, Authorization'
  );

  if ( req.method === 'OPTIONS' ) {
    res.header('Access-Control-Allow-Methods', 'PUT, POST, PATCH, DELETE, GET');
    return res.status(200).json({});
  }

  next();
});

app.use('/api/agency', agencyRoutes);
app.use('/api/company', companyRoutes);

app.use(express.static(path.resolve(__dirname, '../www', 'build')));
app.get('*', (req, res) => {
  res.sendFile(path.resolve(__dirname, '../www', 'build', 'index.html'));
});

app.use( (req, res, next) => {
  const error = new Error('Not found');
  error.status = 404;
  next(error);
});

app.use( (error, req, res, next) => {
  res.status(error.status || 500);
  res.json({
    error: {
      message: error.message
    }
  });
});

app.listen(port, () => console.log(`Server up and running on port ${port}`));
0 голосов
/ 08 ноября 2019

Похоже, что это может быть страница по умолчанию для вашего приложения, даже если ничего не передано. Вы сказали, что независимо от параметра ваш вывод одинаков. Похоже, вы застряли, выводя страницу по умолчанию. Это имеет смысл, потому что итальянец говорит: «Fare la constatazione amichevole non è mai stato così facile» Сделать дружеское заявление никогда не было проще. Я бы проверил проверку настроек по умолчанию, чтобы увидеть, можно ли разрешить java-скрипт, а затем проверить, работает ли он.

, потому что это javascript. Возможно, у вас есть что-то, что мешает java-скрипту позволить этому работать, и этоможет быть страницей по умолчанию, когда ваш java-скрипт не работает.

exports.agency_information = (req, res, next) => {
  console.log({param: req.params.usercode});
};

Вы можете попробовать использовать, чтобы проверить, не отключен ли js.

Как проверитьJavascript включен или нет в Node JS серверный код <noscript> <meta http-equiv=refresh content='0; url=http://your.domain/noscript' </noscript>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...