簡體   English   中英

快速路由:某些路由名稱為404,但其他路由名稱不是?

[英]Express Routing: 404 on some route names, but not others?

我正在制作一個單頁應用程序,前端有Angular路由,但后端讓我感到悲傷。

涉及與數據庫接口的所有路由都可以工作,但是當我添加一個路由(復制完全相同的結構)來發送一個html文件,或者只是hello world時,它返回一個404,甚至沒有在節點控制台上注冊(帶有下面提到的一個奇怪的例外)。

我讀過這篇文章解釋了static應該如何在routes之后出現,這是有意義的,但它並不適用於我的代碼。

app.js如下:

    // SETUP
var express = require('express');
var app = express();
var router = express.Router();
var mongoose = require('mongoose');
var port = process.env.PORT || 3001;
var database = 'mongodb://example-database...';
var path = require('path');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');


// CONFIG 
mongoose.connect(database);

// Note: response parser must be placed before routing
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.set('jsonp callback name', 'cb');

app.use(logger('dev'));
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(router);

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

// ROUTES
require("./routes/api_chirp.js")(router);
require("./routes/api_video.js")(router);
require("./routes/api_interaction.js")(router);
require("./routes/api_user.js")(router);
require("./routes/api_search.js")(router); 
require("./routes/api_jsonp.js")(router);
require("./routes/index.js")(router);


app.use(express.static(path.join(__dirname, 'public')));

// ERROR HANDLING

// catch 404 and forward to error handler
app.use(function(req, res, next) {
    var err = new Error('Not Found');
    err.status = 404;
    next(err);
});

module.exports = app;

app.listen(port);
console.log("App listening on port " + port);

index.js (注意:在其他工作API路由中使用的結構相同(使用備用路由,即“/ api / someroute”)

module.exports = function(router) {
  router.route('/workspace') // Only works if route is prefixed with "api_someword", "someword" itself won't work.
    .get(function(req, res) {
      console.log('request received');
      res.send('hello world');
    }); // Ends - Post

};

問題:我已經走到了盡頭......任何建議,答案都會有所幫助。 如何在index.js中使用該路由?

// ROUTES
require("./routes/api_chirp.js")(router);
require("./routes/api_video.js")(router);
require("./routes/api_interaction.js")(router);
require("./routes/api_user.js")(router);
require("./routes/api_search.js")(router); 
require("./routes/api_jsonp.js")(router);
require("./routes/index.js")(router);

像這樣傳遞app對象

//路線

  require("./routes/api_chirp.js")(app);
    require("./routes/api_video.js")(app);
    require("./routes/api_interaction.js")(app);
    require("./routes/api_user.js")(app);
    require("./routes/api_search.js")(app); 
    require("./routes/api_jsonp.js")(app);
    require("./routes/index.js")(app);

解決了:

另一個在nginx上放置路徑過濾器的開發人員阻止了任何沒有的url,並沒有以/api為前綴來接通節點。 我添加了它,它解決了這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM