Я получаю ошибку типа: express.json() не является функцией

#node.js #express #body-parser

Вопрос:

Я новичок, и я использую github-учебную лабораторию. В нем указано, что его следует использовать app.use(bodyParse.json()) для выполнения запроса POST, но VSCode указывает, что «анализ тела» устарел.

Я искал в Интернете, и большинство людей говорят, что используют app.use(express.json()) текущую версию Express

Моя экспресс-версия: 4.17.1

Версия моего узла: 14.17.0

 const express = require('express');
const app = express();

app.use(express.json());
app.use(express.urlencoded({ extended: false }))

const mockUserData = [
    {name: 'Mark'},
    {name: 'Jill'}
]
app.get('/users', function(req, res){
    res.json({
        success: true,
        message: 'successfully got users. Nice!',
        users: mockUserData
    })
})
// colons are used as variables that can be viewed in the params
app.get('/users/:id', function(req,res){
    console.log(req.params.id);
    res.json({
        success: true,
        message: 'got one user',
        user: req.params.id
    })
})

app.post('/login', function(req,res){
    // Typically passwords are encrypted using something like bcrypt before sending to database
    const username = req.body.username;
    const password = req.body.password;

    // This should come from the database
    const mockUsername = 'billyTheKid';
    const mockPassword = 'superSecret';

    if (username === mockUsername amp;amp; password === mockPassword) {
        // In practice, use JSON web token sign method here to make an encrypted token
        res.json({
            success: true,
            message: 'password and username match!',
            token: 'encrypted token goes here'
        })
    } else {
        res.json({
            success: false,
            message: 'password and username do not match'
        })
    }
})

app.listen(8000, function(){
    console.log('server is running')
})
 
 Macs-MBP:node-express-course mac$ node server.js
/Users/mac/Documents/node-express-course/server.js:4
app.use(express.json());
                ^

TypeError: express.json is not a function
    at Object.<anonymous> (/Users/mac/Documents/node-express-course/server.js:4:17)
    at Module._compile (internal/modules/cjs/loader.js:1068:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1097:10)
    at Module.load (internal/modules/cjs/loader.js:933:32)
    at Function.Module._load (internal/modules/cjs/loader.js:774:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
 
 Macs-MBP:node-express-course mac$ head node_modules/express/package.json
{
  "_from": "express",
  "_id": "express@4.17.1",
  "_inBundle": false,
  "_integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
  "_location": "/express",
  "_phantomChildren": {},
  "_requested": {
    "type": "tag",
    "registry": true,
 

Комментарии:

1. Вы уверены, что у вас есть экспресс-версия, о которой вы думаете? Попробуйте cat node_modules/express/package.json | jq .version (или просто откройте файл и проверьте версию). Промежуточное программное обеспечение JSON доступно только с версии v4.16.0

2. Я проверил package.json его v4.17.1

3. Тогда это очень странно. Я вообще не могу воспроизвести эту проблему. Вы уверены, что все написано правильно? Убедитесь, что вы скопировали / вставили свой точный код в вопрос выше. Пожалуйста, также скопируйте / вставьте точное сообщение об ошибке полностью

4. Я только что обновил его.

5. В крайнем случае, попробуйте старое rm -r package-lock.json node_modules amp;amp; npm install

Ответ №1:

Я переустановил express. Возможно, я допустил ошибку при первоначальной установке. Я должен был попробовать это с самого начала. Спасибо за помощь.

Ответ №2:

Сначала вы можете использовать Bodyparser или переустановить его, но я рекомендую использовать Bodyparser

Комментарии:

1. Я сделал это изначально, но там написано, что bodyparser устарел. По-видимому, он доступен только для версий старше 4.16.1. Я попробую переустановить

2. bodyParser устарел, так как он был включен в сам Express