【问题标题】:Node Js express router not workingNode Js express路由器不工作
【发布时间】:2017-02-13 02:20:30
【问题描述】:

js,我正在学习 node js 和 express,我正在学习 express 路由,我在 rest.js 中有以下代码

    const http = require('http');
const express = require('express');
const widgetRouter = require('./rest/widgets');

const app1 = express(); 

const server = http.createServer(app1);



app1.get('/api',widgetRouter);


server.listen(3000,function(){
    console.log('server started in port 3000');

});



const app = express();

我也有 widgets.js 文件

const express = require('express');

const widgetRouter = express.Router();

widgetRouter.route("/widgets")
    .get(function(req,res){
        res.json({"abc":"hello"});
    })
    .post();

widgetRouter.route("/widgets/:widgetId")
    .get()
    .put()
    .delete();



module.exports = widgetRouter;

但是当我尝试从邮递员那里测试其余的 api(http://localhost:3000/api/widgets) 时,它说Cannot GET /api/widgets

【问题讨论】:

    标签: javascript node.js web-services express


    【解决方案1】:

    您已经导入并初始化了 express 模块,但随后您使用 http 模块启动了一个服务器。您应该只使用 Express:

    您还应该使用app.use('/api',widgetRouter) 而不是app.get('/api', widgetRouter),这是一个快速中间件。

    const express = require('express');
    const app = express(); 
    
    const widgetRouter = require('./rest/widgets');
    
    app.use('/api', widgetRouter);
    app.get('/', function(req, res) {
        res.send('Home');
    });
    
    app.listen(3000, function(){
        console.log('server started in port 3000');
    });
    

    【讨论】:

    • 我也用过那个,我尝试在 rest.js 中从 app1.listen 开始,但是没有用
    • @ujjwalsingh 它给了你什么错误?可能 widgetRouter 的 require 路径错误,或者您仍在使用 Express 的两个不同实例(app 和 app1)并且您将它们混合在一起(应该只有一个)
    【解决方案2】:

    你也可以试试。

    rest.js

    const express = require('express');
    const http = require('http');
    const  router = express.Router();
    
    const app = express();
    
    require('./widgets')(app, router);
    
    app.get('/', function(req, res) {
        res.send('Home');
    });
    
    app.listen(3000,function(){
        console.log('server started in port 3000');
    });
    

    widgets.js

    module.exports = function(app, router){
        router.route("/widgets")
            .get(function(req,res){
                res.json({"abc":"hello"});
            })
            .post();
    
        router.route("/widgets/:widgetId")
            .get()
            .put()
            .delete();
    
        app.use('/api', router);
    });
    

    【讨论】:

    • 它确实有效,但方式似乎很复杂,对初学者不友好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 2017-06-10
    • 1970-01-01
    • 2013-08-22
    • 2017-06-14
    • 1970-01-01
    • 2016-06-27
    相关资源
    最近更新 更多