当路由存在时,为什么我从Express Route收到404错误?

问题描述 投票:0回答:1

尝试使用express时可以完成最基本的POST,并且无法弄清楚为什么我在路由存在时遇到404错误。

角/快递/ server.js

const express = require('express');
var app = express();
const http = require('http');
const path = require('path');
const passport = require('passport');
const morgan = require('morgan');
const cookieParser = require('cookie-parser');
const bodyParser = require('body-parser');
const session = require('express-session');
const errorhandler = require('errorhandler');
var cors = require('cors')

var env = process.env.NODE_ENV || 'development';

const config = require('./config/config')[env];

console.log('Using configuration', config);

require('./config/passport')(passport, config);


app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(cookieParser());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
app.use(session(
  {
    resave: true,
    saveUninitialized: true,
    cookieName: 'session',
    secret: 'random_string_goes_here',
    duration: 15 ,
    activeDuration: 15,
    maxAge: 30
  }));
app.use(passport.initialize());
app.use(passport.session());
app.use(morgan('combined'));
app.use(cors());
app.options('*', cors());

app.use(function(req, res, next) {
  res.setHeader('Access-Control-Allow-Origin', '*');
  res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
  res.setHeader('Access-Control-Allow-Methods', 'GET,POST,OPTIONS,DELETE,PUT');
  res.setHeader('Access-Control-Allow-Credentials', true);
  next();
}); 
 

app.set('port', config.app.port);



require('./config/routes')(app, config, passport);


app.listen(app.get('port'), function () {
  console.log('Express server listening on port ' + app.get('port'));
});

角/快递/配置/ routes.js

var express = require('express')
var router = express.Router()
var app = express()
var xmldoc = require('xmldoc');
var DOMParser = require('dom-parser');
//const cors = require("cors"); 
//const corsOptions = { origin: "*", credentials: true }; 
//app.use(cors(corsOptions)); 

  app.post('/nameid',  function (req, res) {
    nameid = ({ 'nameid': 'hi'});
console.log(nameid);
console.log(JSON.stringify(nameid));
   res.send(JSON.stringify(nameid));
      })


module.exports = function (app, config, passport) {
	
	  app.post('/nameid',  function (req, res) {
    nameid = ({ 'nameid': 'hi2'});
console.log(nameid);
console.log(JSON.stringify(nameid));
   res.send(JSON.stringify(nameid));
      })

  app.get('/', function (req, res) {
      res.redirect('/home')
  });


  app.post('/', function(req, res) {

  
	  
	  	    app.post('/nameid2',  function (req, res) {
    nameid = ({ 'nameid': 'hi'});
console.log(nameid);
console.log(JSON.stringify(nameid));
   res.send(JSON.stringify(nameid));
      })

  

});
};

注意我有一个nameid和nameid2的路由,所以当我提交更改时,我可以测试两种单独的方式。我试图让其中一个以任何可能的方式工作。

下面是从Angular调用POST的代码:

角/ SRC /应用程序/ service.services.ts

    getNameID(): Observable<NameIDResult[]> {
    const url = environment.apiUrl+'nameid';
	    const data = ({

    });
    return this._http.post(url, data)
    .pipe(
      map((res) => {
        console.log(res);
        return <NameIDResult[]> res;
      })
    );
  }
  
      getNameID2(): Observable<NameIDResult[]> {
    const url = environment.apiUrl+'nameid2';
	    const data = ({

    });
    return this._http.post(url, data)
    .pipe(
      map((res) => {
        console.log(res);
        return <NameIDResult[]> res;
      })
    );
  }

任何建议都会得到真正的赞赏,因为我已经尝试了所有我能想到的东西。

目前的错误:

ERROR 
Object { headers: {…}, status: 404, statusText: "Not Found", url: "https://example.com/nameid2", ok: false, name: "HttpErrorResponse", message: "Http failure response for https://example.com/nameid2: 404 Not Found", error: "<!DOCTYPE html><html><head><title></title><link rel=\"stylesheet\" href=\"/stylesheets/style.css\"></head><body><h1>Not Found</h1><h2>404</h2><pre>Error: Not Found\n    at /usr/src/app/app.js:51:15\n    at Layer.handle [as handle_request] (/usr/src/app/node_modules/express/lib/router/layer.js:95:5)\n    at trim_prefix (/usr/src/app/node_modules/express/lib/router/index.js:317:13)\n    at /usr/src/app/node_modules/express/lib/router/index.js:284:7\n    at Function.process_params (/usr/src/app/node_modules/express/lib/router/index.js:335:12)\n    at next (/usr/src/app/node_modules/express/lib/router/index.js:275:10)\n    at /usr/src/app/node_modules/express/lib/router/index.js:635:15\n    at next (/usr/src/app/node_modules/express/lib/router/index.js:260:14)\n    at next (/usr/src/app/node_modules/express/lib/router/route.js:127:14)\n    at cors (/usr/src/app/node_modules/cors/lib/index.js:188:7)\n    at /usr/src/app/node_modules/cors/lib/index.js:224:17\n    at originCallback (/usr/src/app/node_modules/cors/lib/index.js:214:15)\n    at /usr/src/app/node_modules/cors/lib/index.js:219:13\n    at optionsCallback (/usr/src/app/node_modules/cors/lib/index.js:199:9)\n    at corsMiddleware (/usr/src/app/node_modules/cors/lib/index.js:204:7)\n    at Layer.handle [as handle_request] (/usr/src/app/node_modules/express/lib/router/layer.js:95:5)</pre></body></html>" }
angular express post routes
1个回答
0
投票

angular/express/server.js内的某个地方,您需要明确告诉它您要使用来自angular/express/config/routes.js的路线。首先导入你的routes.js

const routes = require('/path/to/routes.js');

然后在app.use语句中的正确位置插入:

app.use('/', routes);

注意:我建议为你的api提供某种子域名,例如:

app.use('/api/v1', routes);
© www.soinside.com 2019 - 2024. All rights reserved.