【问题标题】:Express: router.route does not send request but keeps goingExpress:router.route 不发送请求但继续
【发布时间】:2016-04-30 04:28:01
【问题描述】:

我的Express 应用程序中有以下代码:

var express    = require('express');        // call express
var app        = express();                 // define our app using express
var bodyParser = require('body-parser');
var mongoose   = require('mongoose');
 // connect to our database
mongoose.connect('mongodb://username:pwd@<url>/db-name');

var Bear = require('./app/models/bear');

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

var port = process.env.PORT || 8080;        // set our port

var router = express.Router();   

//middleware to use for all requests
router.use(function(req, res, next) {
    // do logging
    console.log('Something is happening.');
    next(); // make sure we go to the next routes and don't stop here
});

router.route('/bears')

  .get(function(req, res) {
    Bear.find(function(err, bears) {
        if(err)
            res.send(err);
        console.log('I am in GET');
        res.json(bears);
    });
  })
  .post(function(req, res) {
    var bear = new Bear();
    bear.name = req.body.name;
    console.log('body param:'+ bear.name);
    bear.save(function(err) {
        if(err)
            res.send(err);

        res.json({ message: 'Bear created!'});
    });
  });

router.get('/', function(req, res) {
    res.json({ message: 'hooray! welcome to our api!' });
});

app.use('/api', router);


app.listen(port);

这是我的Model 代码:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var BearSchema = new Schema({
    name: String
});

module.exports = mongoose.model('Bear', BearSchema);

当我使用 POSTMAN 或浏览器时,请求会继续进行,不会停止或返回任何内容。我认为回调应该结束但不知道如何。

我正在点击http://localhost:8080/api/bears,它一直在刷新,请求永远不会结束。

当我点击 /api/bears 并且请求没有结束时从服务器输出:

Something is happening.

当我点击 /api 时服务器的输出

Something is happening.

在浏览器上我看到了,

Cannot GET /api

【问题讨论】:

  • 您发送什么请求?您在控制台中看到任何错误吗?
  • @AlexanderMac localhost:8080/api/bears 并且没有控制台错误并且它不打印 I am in GET
  • 您是否使用额外的中间件app.use('/api', you_router)
  • @AlexanderMac 是的,我愿意
  • 您看到Something is happening. 消息了吗?并添加到问题 app.js,您已在其中定义了 app.use('/api', you_router) 中间件

标签: javascript node.js express


【解决方案1】:

问题在于我的 package.json 中的 mongooose 版本。我更改为最新版本4.1.11 并做了npm install。这是一个错误:https://github.com/meanjs/mean/issues/1010

我添加了以下代码以确保没有错误并且成功:

mongoose.connect('mongodb://db-name:pwd@mongourl:port/db', function(err) {
   if(err) {
     console.log(err);
   } else {
     console.log('success');
   }
 });

我收到了这个:

{ [MongoError: auth failed] name: 'MongoError', ok: 0, errmsg: 'auth failed', code: 18 }

然后我使用RoboMongo 进行连接,一切都很好,所以我开始查看错误。 RoboMongo 使用 SCRAM-SHA-1 作为身份验证机制。我开始在我遇到上述错误报告的 URL 中指定 auth 作为一个选项。

【讨论】:

    猜你喜欢
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 2021-03-12
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多