这是我的简单形式:
<form id="loginformA" action="userlogin" method="post">
<div>
<label for="email">Email: </label>
<input type="text" id="email" name="email"></input>
</div>
<input type="submit" value="Submit"></input>
</form>
Run Code Online (Sandbox Code Playgroud)
这是我的Express.js /Node.js代码:
app.post('/userlogin', function(sReq, sRes){
var email = sReq.query.email.;
}
Run Code Online (Sandbox Code Playgroud)
我试过sReq.query.email
或sReq.query['email']
或sReq.params['email']
等他们都没有工作.他们都回来了undefined
.
当我改为Get电话时,它有效,所以..任何想法?
因此,可以尝试获取以下JSON对象:
$ curl -i -X GET http://echo.jsontest.com/key/value/anotherKey/anotherValue
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: application/json; charset=ISO-8859-1
Date: Wed, 30 Oct 2013 22:19:10 GMT
Server: Google Frontend
Cache-Control: private
Alternate-Protocol: 80:quic,80:quic
Transfer-Encoding: chunked
{
"anotherKey": "anotherValue",
"key": "value"
}
$
Run Code Online (Sandbox Code Playgroud)
有没有办法在使用node或express的服务器的响应中生成完全相同的主体?显然,可以设置标头并指示响应的内容类型将是"application/json",但是有不同的方式来编写/发送对象.我经常使用的那个是使用以下形式的命令:
response.write(JSON.stringify(anObject));
Run Code Online (Sandbox Code Playgroud)
然而,这有两点可以说是好像是"问题":
另一个想法是使用命令:
response.send(anObject);
Run Code Online (Sandbox Code Playgroud)
这似乎是基于curl的输出发送一个JSON对象,类似于上面的第一个例子.但是,当在终端上再次使用卷曲时,在身体的末端没有新的线条字符.那么,如何使用node或node/express在最后附加一个新行字符来实际记下这样的内容?
我正在写一个相对较新的应用程序,并想知道我应该使用哪个:
express.json()
要么
bodyParser.json()
我可以假设他们做同样的事情.
我想使用express.json()
已经内置的内容.
我有一个简单的 node.js 应用程序。我想从用户那里获取帖子正文。
应用程序.js
var express = require('express');
var app = express();
app.use(express.json());
app.post('/api/user', function (req, res) {
console.log(req.body);
console.log(req.body.username);
});
module.exports = app;
Run Code Online (Sandbox Code Playgroud)
服务器.js
var app = require('./app.js');
var server = app.listen(3000, function () {
var port = server.address().port;
console.log('Web App Hosted at http://localhost:%s',port);
});
Run Code Online (Sandbox Code Playgroud)
当我用 启动它时node server.js
,它很好。当我与邮递员核对时,
在控制台中,它返回
Web App Hosted at http://localhost:3000
{}
undefined
Run Code Online (Sandbox Code Playgroud)
我有最新的快递。
我也尝试过其他的事情,比如 add body-parser
,add header to content-type
, add express.urlencoded()
,但没有工作。我需要从form-data
上面图片中的邮递员那里获取数据。我怎样才能得到它?
我想接受其他应用程序对我的 Angular 应用程序的发布请求。
基本上,他们会将客户 ID 列表作为 POST 有效负载发送,我必须在我的角度应用程序和渲染 GUI 中处理它。
我尝试在 app.js 中执行以下 app.post 方法,但它抛出错误“无法执行 POST”
app.post('/customer', function (req, res) {
console.log(req.body);
});
Run Code Online (Sandbox Code Playgroud)
这是一个有点尴尬的要求,因为 Angular 是 JavaScript 框架,它不接受 post 请求,因为 post 请求只需要在服务器端处理,而不是在客户端处理。
但是有没有什么解决办法,比如在 Node JS 中接受 post 请求并发送到角度应用程序并渲染 UI?可能是一个愚蠢的想法,所以至少需要一些想法或解决方法。
我有 Node JS 应用程序,主要是通过 socket.io 获取实时数据。
我用nodejs创建了一个crud Rest api,正在用postman测试该api。每当我使用邮递员中的“正文”发送请求时,req.body 都会返回 undefine。请问可能是什么原因?
我正在创建一个 PUT 方法来更新给定的数据集,但是在我的更新函数中, req.body 未定义。
控制器.js
async function reviewExists(req, res, next) {
const message = { error: `Review cannot be found.` };
const { reviewId } = req.params;
if (!reviewId) return next(message);
let review = await ReviewsService.getReviewById(reviewId);
if (!review) {
return res.status(404).json(message);
}
res.locals.review = review;
next();
}
async function update(req, res, next) {
console.log(req.body);
const knexInstance = req.app.get('db');
const {
review: { review_id: reviewId, ...review },
} = res.locals;
const updatedReview = { ...review, ...req.body.data };
const newReview = …
Run Code Online (Sandbox Code Playgroud) 在版本 1 中可以正常工作,但整个服务器配置已更改。这就是我在按照 Daniel 在评论中的建议将 bodyparser() 添加到 Express 应用程序后所拥有的:
const server = new ApolloServer({
typeDefs,
resolvers,
playground: {
settings: {
'editor.theme': 'light',
}
},
})
// Initialize the app
const app = express();
app.use(cors())
app.use(bodyParser.json())
server.applyMiddleware({
app
})
app.post('/calc', function(req, res){
const {body} = req;
console.log("HOWDYHOWDYHOWDY", body) // <== body is {}
res.setHeader('content-type', 'application/json')
calculate(body)
.then(result => res.send(result))
.catch(e => res.status(400).send({error: e.toString()}))
})
Run Code Online (Sandbox Code Playgroud)
尽管调用了处理程序,但请求正文永远不会到达 app.post 处理程序。不过,我看到它是从浏览器中发出的。有任何想法吗?
更新: 丹尼尔有正确的答案,但我在使用的请求标头中遇到了另一个问题。一旦我解决了这个问题,邮件处理程序就会收到正文。