Request类型的req变量对于属性body没有intellisense。这是因为打字吗?
import { Request, Response } from 'express'
import { ok, bad } from './responses'
export const signIn: async (req: Request, res: Response) => {
try {
const { name, pword } = req.body // body is not recognized
const data = auth.signIn(name, password)
ok(res, data)
} catch (error) {
bad(res, error)
}
}
body-parser 已从 express 4 中删除到单独的项目中, 所以不会有任何关于它的类型定义。
我是这样使用的:
import * as bodyParser from 'body-parser';
let router: Router = express.Router();
router.use(bodyParser.text());
(req: Request, res: Response) => {
let address = req['body'];
}
npm install @typings/express --save-dev
它给了我智能感知并允许识别“req.body”。
import { Request, Response } from 'express';
...
app.post('/signup', async (req: Request, res: Response) => {
const { fullName, email } = req.body;
...
})
);
我做的时候没用[附加]解析请求体
Express.Request
body-parser
import express from 'express';
const app = express();
// Parse request body
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
// Test Route
app.get('/', (req, res) => res.json({ message: 'Hello World' }));
请注意,我在 express.urlencoded
和
express.json
上面放置了两件事,因为我发现表单数据发布请求仅适用于
express.json
。因此,保留它们都会解析请求中的所有类型的 json 有效负载到
req.body
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
但是非常重要的顺序,中间件应该在路由之前,而不是之后。
package.json
文件来解决这个问题,添加:
"@types/express": "^4.17.17",