【问题标题】:Node.js REST with Express not responding带有 Express 的 Node.js REST 没有响应
【发布时间】:2016-08-12 09:06:11
【问题描述】:

我是 Node 和 Express 的新手,所以到目前为止我的知识有限。我有一个使用 Node.js、Express 和 MongoDB 的设置。我正在尝试通过在我的主 .js 文件中执行以下操作来路由请求“localhost:3000/v1/user”:

MongoClient.connect(mongoUrl, function (err, db) {
        if (err) {
          console.log("Unable to connect to the mongoDB server. Error:", err);
        } else {
          //HURRAY!! We are connected. :)
          console.log("Connection established to Mongo DB with connection string " + connection_string);


          let port = process.env.NODE_PORT || 3000;
          app.listen(port);
          console.log('Server is now listening to port ' + port);

          app.use(function(req, res){
            req.db = db;
            console.log("DB now available for all routes");
          });


          console.log("Using v1");
          app.use('/v1', v1Route);
        }
      });

与 mongo 的连接建立正常。 我在两个单独的文件中有两个路由器,如下所示:

v1路线:

var express = require('express')
var router = express.Router();

const userRoute = require('./userRoute');

router.use('/user', userRoute);

module.exports = router;

用户路由:

const express = require('express');
var router = express.Router();

router.get('/', function(req,res){
  console.log('fetching all users');
  var collection = req.db.collection('user');
  collection.find().toArray(function (err, result) {

     if (err) {
       console.log(err);
     } else if (result.length > 0) {
       console.log('Found entry');
       res.status(200).send('Found:' + result[0].firstName + ' ' + result[0].lastName).end();
     } else {
       console.log('No document(s) found with defined "find" criteria!');
       res.status(200).send('No document(s) found with defined "find" criteria!').end();
     }
   })


});

module.exports = router;

问题是当我尝试发出请求“localhost:3000/v1/user”时没有任何反应。我没有收到错误,只是浏览器停止了。当我发送请求时,我得到日志字符串“DB 现在可用于所有路由”。

【问题讨论】:

  • 在监听端口之前可以先调用app.use吗?
  • 我试过了,但没有帮助

标签: node.js mongodb rest express


【解决方案1】:

在您的中间件函数中,您没有调用next 处理程序,因此不会执行下一个中间件:

app.use(function(req, res, next) {
   req.db = db;
   console.log("DB now available for all routes");
   next();
});

您可以在官方express 网站上查看更多关于编写中间件的文档:http://expressjs.com/en/guide/writing-middleware.html

【讨论】:

    【解决方案2】:

    你必须在 app.use('/v1', v1Route); 之后启动服务器

    MongoClient.connect(mongoUrl, function (err, db) {
            if (err) {
              console.log("Unable to connect to the mongoDB server. Error:", err);
            } else {
              //HURRAY!! We are connected. :)
              console.log("Connection established to Mongo DB with connection string " + connection_string);
    
              app.use(function(req, res){
                req.db = db;
                console.log("DB now available for all routes");
              });
    
    
              console.log("Using v1");
              app.use('/v1', v1Route);
    
              let port = process.env.NODE_PORT || 3000;
              app.listen(port);
              console.log('Server is now listening to port ' + port);
            }
          });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-03
      • 2014-05-10
      • 2019-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-12
      • 1970-01-01
      相关资源
      最近更新 更多