res. json не работает и по умолчанию используется последний использованный res.send, даже если этот код больше не существует - PullRequest
0 голосов
/ 24 марта 2020

У меня есть некоторый код в express, который создает документ Mon goose из значений, отправленных в теле. Я пытаюсь отправить обратно JSON результаты как для успешных, так и для неудачных (проверка происходит с понедельника goose). Но res. json () вообще не работает.

Вместо объекта, который я пытаюсь отправить, результатом является последнее значение, отправленное с помощью res.send (), даже когда res. отправить больше нигде в коде. Я получаю только тот текст, который использовался в последний раз, в обоих случаях, поэтому их значения не отличаются. Как видите, я пытался выполнить res.send () с «success» и «no success», и последний вызов был «success», поэтому теперь, как при успешном, так и при неудачном завершении, он всегда возвращает «success» вместо JSON Я хочу.

Если я изменяю статус HTTP перед вызовом json (), отправляется правильный статус, но значение все равно неверное.

router.post('/register', function (req, res, next) {
    const user = new User(req.body);
    user.save().then((doc) => {
        console.log(doc);
        console.log('success');
        // res.json({success: true});
        res.send('success');
    }).
    catch ((err) => {
        console.log('error');
        // res.json({error: 'ikke'});
        res.send('no success');
    });
});

Приложение. js

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var lessMiddleware = require('less-middleware');
var logger = require('morgan');

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/kb-skills', {useNewUrlParser: true, useUnifiedTopology: true});
mongoose.set('useCreateIndex', true);
mongoose.Promise = Promise;

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(lessMiddleware(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

1 Ответ

0 голосов
/ 25 марта 2020

Я обнаружил, что проблема была в Почтальоне, который не обновлял представление результатов при возврате json. Вот почему он отлично работал с текстовым результатом, но не с json. Обновлен до последней версии с сайта и теперь работает отлично!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...