[email protected] używa tylko parsera treści „1.19.0” jako zależności
Tagi
Odpowiedzi:
249
Wcześniejsze wersje Express zawierały wiele oprogramowania pośredniego w pakiecie. bodyParser był jednym z programów pośrednich, które go pojawiły. Kiedy wydano Express 4.0, zdecydowali się usunąć dołączone oprogramowanie pośrednie z Express i zamiast tego uczynić je osobnymi pakietami. Następnie po zainstalowaniu modułu bodyParser składnia zmieniła się z app.use(express.json())na app.use(bodyParser.json()).
bodyParser został dodany z powrotem do Express w wersji 4.16.0, ponieważ ludzie chcieli, aby był dołączony do Expressu, jak wcześniej. Oznacza to, że nie musisz bodyParser.json()już używać, jeśli korzystasz z najnowszej wersji. Możesz użyć express.json()zamiast tego.
Historia wydań dla wersji 4.16.0 jest tutaj dla zainteresowanych, a żądanie ściągnięcia tutaj .
Czy wtedy też możemy to zrobić app.use(express.urlencoded({ extended: true }));?
Robin Métral
2
Ach tak, jest to również wspomniane w powiązanym PR. Świetny!
Robin Métral
1
Czy to oznacza, że wykonują tę samą pracę?
GNETO DOMINIQUE
co się stanie, jeśli użyję zarówno // Data Parsing app.use (express.json ()); app.use (express.urlencoded ({Extended: false})); czy to jest dobre? ponieważ tutorial na youtube mówi mi, żebym używał obu
rickvian
1
@rickvian - Jeśli chcesz, możesz użyć obu. json jest dla JSON, a urlencoded jest dla danych zakodowanych w URL. Jeśli dodasz oba, będziesz mógł przeanalizować oba typy.
Mika Sundland
15
TAK! Poprawny
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
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', 'pug');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
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;
Chociaż ten fragment kodu może rozwiązać problem, dołączenie wyjaśnienia naprawdę pomaga poprawić jakość Twojego posta. Pamiętaj, że odpowiadasz na pytanie do czytelników w przyszłości, a osoby te mogą nie znać powodów, dla których zaproponowałeś kod.
Brett DeWoody
8
Tak, oba są takie same.
jeśli przejdziesz do pliku node_module / express / lib / express.js
możesz zobaczyć pod zależnościami modułu moduł parsera treści jest już zaimportowany
Tak!! Ze względu na powszechną opinię ludzi, którzy chcą z powrotem zintegrować parser ciała z ekspresem, najnowsza wersja robi dokładnie to. Powinieneś mieć rację, zakładając, że oba wykonują te same zadania, czyli rozpoznają obiekt żądania przychodzącego jako obiekty JSON. Zapraszam do korzystania z obu.
Odpowiedzi:
Wcześniejsze wersje Express zawierały wiele oprogramowania pośredniego w pakiecie. bodyParser był jednym z programów pośrednich, które go pojawiły. Kiedy wydano Express 4.0, zdecydowali się usunąć dołączone oprogramowanie pośrednie z Express i zamiast tego uczynić je osobnymi pakietami. Następnie po zainstalowaniu modułu bodyParser składnia zmieniła się z
app.use(express.json())
naapp.use(bodyParser.json())
.bodyParser został dodany z powrotem do Express w wersji 4.16.0, ponieważ ludzie chcieli, aby był dołączony do Expressu, jak wcześniej. Oznacza to, że nie musisz
bodyParser.json()
już używać, jeśli korzystasz z najnowszej wersji. Możesz użyćexpress.json()
zamiast tego.Historia wydań dla wersji 4.16.0 jest tutaj dla zainteresowanych, a żądanie ściągnięcia tutaj .
źródło
app.use(express.urlencoded({ extended: true }));
?TAK! Poprawny
var createError = require('http-errors'); var express = require('express'); var path = require('path'); var cookieParser = require('cookie-parser'); var logger = require('morgan'); 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', 'pug'); app.use(logger('dev')); app.use(express.json()); app.use(express.urlencoded({ extended: false })); app.use(cookieParser()); 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;
źródło
Tak, oba są takie same.
jeśli przejdziesz do pliku node_module / express / lib / express.js
możesz zobaczyć pod zależnościami modułu moduł parsera treści jest już zaimportowany
/** * Module dependencies. */ var bodyParser = require('body-parser') //other modules
obiekty i metody wewnątrz modułu bodyparser są dostępne, gdy są eksportowane przy użyciu specjalnego obiektu module.exports
exports = module.exports = createApplication; exports.json = bodyParser.json
jest to dostępne z obiektu ekspresowego po prostu przez wywołanie
express.json()
źródło
Tak!! możesz użyć obu z nich. Jednak ponieważ
express.json()
jest już wbudowanyexpress
, rozsądniej jest używaćexpress.json()
niżbodyParser.json()
.źródło
Tak!! Ze względu na powszechną opinię ludzi, którzy chcą z powrotem zintegrować parser ciała z ekspresem, najnowsza wersja robi dokładnie to. Powinieneś mieć rację, zakładając, że oba wykonują te same zadania, czyli rozpoznają obiekt żądania przychodzącego jako obiekty JSON. Zapraszam do korzystania z obu.
źródło