我有下面的打字稿代码:
import * as express from 'express';
import * as bodyParser from 'body-parser';
...
const app: express.Application = express();
app.use(bodyParser.json());
Run Code Online (Sandbox Code Playgroud)
在 VSCode 中,最后一行的 bodyParser 用黄色波浪线标记,表示不推荐使用 body-parser。
在 .d.ts 文件中,我看到以下内容:
/** @deprecated */
declare function bodyParser(
options?: bodyParser.OptionsJson & bodyParser.OptionsText & bodyParser.OptionsUrlencoded,
): NextHandleFunction;
declare namespace bodyParser {
...
function json(options?: OptionsJson): NextHandleFunction;
Run Code Online (Sandbox Code Playgroud)
为什么 linter 会抱怨 body-parser 函数,而我没有在我的代码中将它用作函数?我是否在 tsconfig.json 文件中遗漏了一些东西来防止这种情况发生?编译似乎没有问题。
我开始学习node.js并试图找出如何获取POST请求的内容.我想按照这篇文章中的说明进行操作.到目前为止,我已成功安装了node.js(在Windows 7上)并表达,并且能够使我的第一个脚本工作.但是当我尝试使用body-parser时,问题出现了.我安装了它,它似乎在那里
这是node.js脚本的代码
var express = require('express');
var bodyParser = require('body-parser');
var app = express();
app.use( bodyParser.json() ); // to support JSON-encoded bodies
app.use(express.json()); // to support JSON-encoded bodies
app.get('/', function(req, res) {
res.setHeader('Content-Type', 'text/plain');
res.end('Vous êtes à l\'accueil');
});
app.get('/user/:usernum', function(req, res) {
res.setHeader('Content-Type', 'text/plain');
res.end('You are on page USER with n° : ' + req.params.usernum);
});
// https://stackoverflow.com/questions/5710358/how-to-get-post-a-query-in-express-js-node-js
app.post('/adonis', function(req, res) {
res.setHeader('Content-Type', 'text/plain');
console.log(req.body.title);
// res.write(JSON.stringify(req));
res.end('Hopefully I stringified a POST');
});
// ... Tout …Run Code Online (Sandbox Code Playgroud) 当我通过"node app.js"命令运行代码时,显示此错误
(node:2509)DeprecationWarning:不推荐使用当前的URL字符串解析器,将来的版本将删除它.要使用新的解析器,请将选项{useNewUrlParser:true}传递给MongoClient.connect.
我在 [1,1] 处的 tsconfig.json 文件中收到此错误六次:
Cannot find type definition file for 'body-parser'.
The file is in the program because:
Entry point for implicit type library 'body-parser'
Run Code Online (Sandbox Code Playgroud)
我真的不确定为什么会收到此错误,更不用说六次了。任何帮助将不胜感激。
这是我的 tsconfig:
{
"compilerOptions": {
/* Visit https://aka.ms/tsconfig.json to read more about this file */
/* Projects */
// "incremental": true, /* Enable incremental compilation */
// "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
// "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo …Run Code Online (Sandbox Code Playgroud) 当我使用postman发送POST请求到localhost:8080/api/newUser with request body:
{name: "Harry Potter"}
Run Code Online (Sandbox Code Playgroud)
在服务器端,console.log(req.body)打印:
{ '{name: "Harry Potter"}': '' }
Run Code Online (Sandbox Code Playgroud)
server.js
var express = require('express');
var app = express();
var router = express.Router();
var bodyParser = require('body-parser');
app.use('/', express.static(__dirname));
router.use(function(req, res, next) {
next();
});
router
.route('/newUser')
.post(function(req, res) {
console.log(req.body);
});
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json()); // support json encoded bodies
app.use('/api', router);
app.listen(8080);
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
这是我服务器的代码:
var express = require('express');
var bodyParser = require("body-parser");
var app = express();
app.use(bodyParser.json());
app.post("/", function(req, res) {
res.send(req.body);
});
app.listen(3000, function () {
console.log('Example app listening on port 3000!');
});
Run Code Online (Sandbox Code Playgroud)
从邮递员,我发起一个POST请求到http:// localhost:3000 /并在Body/form-data中我有一个键"foo"和值"bar".
但是我在响应中不断得到一个空对象.该req.body物业总是空的.
我是NodeJS初学者,跟随着一本书"使用MongoDB和NodeJS进行Web开发".我被困在第6章"闷闷不乐".当我使用multer进行文件上传时,服务器会抛出以下错误:
/Users/fk / Documents / imageuploader / node_modules / express / lib / application.js: 209
throw new TypeError('app.use() requires middleware functions'); ^
TypeError: app.use() requires middleware functions
Run Code Online (Sandbox Code Playgroud)
但当我用bodyParser替换它时,服务器会启动,但是当我点击上传按钮时,它会在浏览器上给出以下错误.
500 TypeError: Cannot read property 'file' of undefined
Run Code Online (Sandbox Code Playgroud)
但是,它应该将我重定向到另一个页面,其中显示上传的文件.
这是我的bodyParser代码,请查看我是否正确使用它,因为它在服务器启动时给了我"body-parser deprecated".我已经看到过像我这样的其他问题,但我遵循但没有一个真正起作用.
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(bodyParser({
uploadDir: path.join(__dirname, '../public/upload/temp')
}));
Run Code Online (Sandbox Code Playgroud)
以下代码显示了我如何使用multer,以防万一我不应该做的事情请告诉我.如果上传文件,正文解析器或者multer,哪一个会更好?
app.use(multer({
dest: path.join(__dirname, '../public/upload/temp')
}));
var saveImage = function() {
var possible = 'abcdefghijklmnopqrstuvwxyz0123456789',
imgUrl = '';
for (var i = 0; i < 6; i += 1) {
imgUrl …Run Code Online (Sandbox Code Playgroud) 不知何故我的 req.body 总是空的,也许你有一个想法:
这是我的服务器代码:
const Express = require('express');
const bodyParser = require('body-parser');
const app = new Express();
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.post('/save', (req, res) => {
console.log(req.body) // => {}
res.send(req.body);
});
const env = process.env.NODE_ENV || 'production';
app.listen(3000, err => {
if (err) { return console.error(err); }
console.info(`Server running on http://localhost:${port} [${env}]`);
});
Run Code Online (Sandbox Code Playgroud)
当我尝试使用 javascript 发送 formdata 时,req.body 为空:
const data = new FormData(document.querySelector('form'));
console.log(data); // seems empty already??? FormData{}??
const xhr = new XMLHttpRequest();
xhr.open('POST', 'http://localhost:3000/save');
xhr.send(data); …Run Code Online (Sandbox Code Playgroud) 我正在将 Express 与 Body Parser 一起使用。给定以下标题键:
X-Master-Key
当我使用下面的代码片段时,它无法输出值
req.headers['X-Master-Key'] // Fails
Run Code Online (Sandbox Code Playgroud)
但是当以上更改为时,它起作用了
req.headers['x-master-key'] // Works
Run Code Online (Sandbox Code Playgroud)
此外,当我尝试输出时req.headers,结果发现 Express 以小写格式输出所有标题。
我开始进一步挖掘并尝试使用以下代码,这些片段中的任何一个都有效
req.header('X-Master-Key'); // Works
// -- OR
req.header('x-master-key'); // Works
Run Code Online (Sandbox Code Playgroud)
那么这里有什么问题呢?为什么 Express 将所有标题键更改为小写?此外,如何使用req.header()与req.headers[]?
我目前正在使用multer用于multipart/form-data在Node.js应用程式与旁边身体解析器.
我想POST使用邮差形式的数据,但得到这个错误.
Error: invalid json
at parse (/Users/k/Documents/application/node_modules/body-parser/lib/types/json.js:79:15)
at /Users/k/Documents/application/node_modules/body-parser/lib/read.js:102:18
at IncomingMessage.onEnd (/Users/k/Documents/application/node_modules/body-parser/node_modules/raw-body/index.js:136:7)
at IncomingMessage.g (events.js:199:16)
at IncomingMessage.emit (events.js:104:17)
at _stream_readable.js:908:16
at process._tickDomainCallback (node.js:381:11)
Run Code Online (Sandbox Code Playgroud)
这就是我在server.js中添加multer和body-parser的方法
var express = require('express');
var mongoose = require('mongoose');
var bodyParser = require('body-parser');
var multer = require('multer');
var app = express();
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
app.use(multer({ dest: './uploads/'}));
Run Code Online (Sandbox Code Playgroud)
我想这可能是因为闷闷不乐.当我删除body-parser并再次尝试时,它会显示空的json for console.log(req.body)和console.log(req.files).
注意:body-parser版本是1.12.0,multer版本是0.1.8.
body-parser ×10
node.js ×8
express ×6
form-data ×2
javascript ×2
multer ×2
typescript ×2
json ×1
mongodb ×1
mongoose ×1
postman ×1
reactjs ×1
tsconfig ×1
tslint ×1