【发布时间】:2019-09-03 09:58:03
【问题描述】:
尝试在使用 express 时完成最基本的 POST,但无法弄清楚为什么当路由存在时会收到 404 错误。
angular/express/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'));
});
angular/express/config/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 的代码:
angular/src/app/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>" }
【问题讨论】:
-
你的网络请求被发送到
https://example.org/,我猜这是错误的 -
我把它作为一个例子——请求转到正确的 url。
-
向我显示您的完整请求 URL,它位于网络选项卡上
-
请求 URL 解析为(注意 https:// 未显示在链接中)mywebsitesname.com/nameid 它有一个 POST 方法,它返回一个 404 错误。
-
您的
routes.js内容复制到这里了吗?看起来……格式不正确?即,为什么app.post('/', function ...围绕router.post('/nameid'...和app.post('/nameid2'...)块?};应该结束的结局是什么?
标签: angular express post routes