节点js快速路由[无法获取:/collection#] [重复]

Posted

技术标签:

【中文标题】节点js快速路由[无法获取:/collection#] [重复]【英文标题】:node js express routing [Cannot GET: /collection#] [duplicate] 【发布时间】:2016-11-19 17:24:27 【问题描述】:

我是 nodejs 的初学者。我有一个简单的 api,可以让您使用护照登录,将您重定向到 /collections。这部分工作正常,问题在于返回的 POST 请求

    Error: Not Found
   at D:\Movie API\src\server\server.js:44:15
   at Layer.handle [as handle_request] (D:\Movie API\src\server\node_modules\express\lib\router\layer.js:82:5)
   at trim_prefix (D:\Movie API\src\server\node_modules\express\lib\router\index.js:302:13)
   at D:\Movie API\src\server\node_modules\express\lib\router\index.js:270:7
   at Function.proto.process_params (D:\Movie API\src\server\node_modules\express\lib\router\index.js:321:12)
   at next (D:\Movie API\src\server\node_modules\express\lib\router\index.js:261:10)
   at D:\Movie API\src\server\node_modules\express\lib\router\index.js:603:15
   at next (D:\Movie API\src\server\node_modules\express\lib\router\index.js:246:14)
   at D:\Movie API\src\server\routes\secure.js:8:11
   at Layer.handle [as handle_request] (D:\Movie API\src\server\node_modules\express\lib\router\layer.js:82:5)
   at trim_prefix (D:\Movie API\src\server\node_modules\express\lib\router\index.js:302:13)
   at D:\Movie API\src\server\node_modules\express\lib\router\index.js:270:7
   at Function.proto.process_params (D:\Movie API\src\server\node_modules\express\lib\router\index.js:321:12)
   at next (D:\Movie API\src\server\node_modules\express\lib\router\index.js:261:10)
   at Function.proto.handle (D:\Movie API\src\server\node_modules\express\lib\router\index.js:166:3)
   at router (D:\Movie API\src\server\node_modules\express\lib\router\index.js:35:12)

没有错误:

Cannot GET /collection

我已经尝试了邮递员发送的 POST 请求,它给了我一个 404。

var auth = express.Router();

require('./routes/auth.js')(auth, passport); app.use('/auth', auth);

服务器路由:

var auth = express.Router();
require('./routes/auth.js')(auth, passport);
app.use('/auth', auth);

var secure = express.Router();
require('./routes/secure.js')(secure);
app.use('/', secure);

身份验证路径工作正常。它接受带有凭据的身份验证文件,而护照则使用身份验证凭据。成功后,它会重定向到 /collections。 授权:

module.exports = function(router, passport)

router.get('/', function(req, res)
    res.render('index.ejs');
);

router.get('/google', passport.authenticate('google', scope: ['profile', 'email']));

router.get('/google/callback', 
  passport.authenticate('google',  successRedirect: '/collections',
                                      failureRedirect: '/' ));


router.get('/logout', function(req, res)
    req.logout();
    res.redirect('/');
)

router.get('/*', function(req, res)
    res.redirect('/auth');
)
;

现在这是安全的:

module.exports = function(router, passport)

router.use(function(req, res, next)
    if(req.isAuthenticated())
        return next();
    

    res.redirect('/auth');
)

// Get all collections
router.get('/collections', collection.getAll);

// Create a collection
router.post('/collection', collection.create);
// Get one product, update one product, delete one product
router.route('/collection/:id')
    .get(collection.read)
    .put(collection.update)
    .delete(collection.delete);



收集模块函数只是以 res.json(id:req.params.id); 响应

从 /auth 到 /collections 的重定向是可以的,但是在 POST /collection 上我得到了提到的错误。有没有人有类似的问题?

【问题讨论】:

【参考方案1】:

尝试var collection = require('../models/collection'); .. 而不是 .

这是因为 require 是您所在文件的相对路径,而不是根目录。

【讨论】:

【参考方案2】:
var collection = require('../models/collection');

Source code link

Node.js require() 使用 CommonJS 语法,所有路径都将相对于调用它的文件。

请参阅docs。

【讨论】:

以上是关于节点js快速路由[无法获取:/collection#] [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在快速路由器获取请求中从节点获取中使用获取

节点,快递 - 无法获取路线

使用护照js保护节点js中的路由

使用刷新令牌来获取新的访问令牌反应和节点 js

快速路由器 CRUD API。无法删除

在Fedora 27上安装节点js服务器