查询字符串变量仍处于快速空4
写为这里建议在*简单的服务器:查询字符串变量仍处于快速空4
rest_api.js:
const express = require('express');
const bodyParser = require('body-parser')
// Initialize RESTful server
const app = express();
app.set('port', (process.env.PORT || 5000));
app.use(bodyParser.json()); // to support JSON-encoded bodies
app.use(bodyParser.urlencoded({extended: true})); // to support URL-encoded bodies
// Spin up the server
app.listen(app.get('port'), function() {
console.log('running on port', app.get('port'))
});
app.post('/bookinghandler', function (req, res) {
let senderId = req.query.sender;
let email = req.query.email;
let hotelName = req.query.hotelName;
let confirmNumber = req.query.confirmNumber;
let start = req.query.startDate;
let end = req.query.endDate;
}
app.js:
// This loads the environment variables from the .env file
require('dotenv-extended').load();
const builder = require('botbuilder');
const restify = require('restify');
// Setup Restify Server
var server = restify.createServer();
server.listen(process.env.port || process.env.PORT || 3978, function() {
console.log('%s listening to %s', server.name, server.url);
});
// Create chat connector for communicating with the Bot Framework Service
var connector = new builder.ChatConnector({
appId: process.env.MICROSOFT_APP_ID,
appPassword: process.env.MICROSOFT_APP_PASSWORD
});
// Listen for messages from users
server.post('/api/messages', connector.listen());
var bot = require("./bot")
bot.InitializeBot(connector);
// Load REST API module
var restApi = require("./rest_api");
并希望通过查询字符串获得参数(URL中的示例请求:bookinghandler?sender=100000250242810&[email protected]&hotelName=Grand Hotel&confirmNumber=654321&startDate=2017-10-11&endDate=2017-10-15
)。
但是req.params
,req.param()
,req.body
,req.query
仍然是空的。我做错了什么?是通过require('url')
还是require('qs')
完成的唯一方法?如果我想通过快递只有它?
问题在于使用2个REST框架:表达和重新定义。需要将整个应用程序作为restify或表示应用程序。在我有一个restify服务器之前,在另一个快速服务器创建之前(只是采取了不同的例子)。一般需要使用一个或另一个,而不是两个。
修改app.js:
// This loads the environment variables from the .env file
require('dotenv-extended').load();
const builder = require('botbuilder');
const restify = require('restify');
// Setup Restify Server
var server = restify.createServer();
server.use(require('restify-plugins').queryParser());
server.listen(process.env.port || process.env.PORT || 3978, function() {
console.log('%s listening to %s', server.name, server.url);
});
// Index route
server.get('/', function (req, res) {
res.send('My chat bot')
});
// Create chat connector for communicating with the Bot Framework Service
var connector = new builder.ChatConnector({
appId: process.env.MICROSOFT_APP_ID,
appPassword: process.env.MICROSOFT_APP_PASSWORD
});
// Listen for messages from users
server.post('/api/messages', connector.listen());
var bot = require("./bot")
bot.InitializeBot(connector);
// Load REST API module
var restApi = require("./rest_api");
// POST request from webview page
server.post('/bookinghandler', restApi.BookingHandler);
修改rest_api.js:
const service = require("./service");
module.exports.BookingHandler = async function (req, res, next) {
let senderId = req.query.sender;
let email = req.query.email;
let hotelName = req.query.hotelName;
let confirmNumber = req.query.confirmNumber;
let start = req.query.startDate;
let end = req.query.endDate;
res.send(200); // Success
return next(false);
};
app.post('/bookinghandler', function (req, res) {
let senderId = req.query.sender;
let email = req.query.email;
let hotelName = req.query.hotelName;
console.log(req.query, senderId, email, hotelName)
})
打印此输出在我的终端
{ sender: '100000250242810', email: '[email protected]', hotelName: 'Grand' } '100000250242810' '[email protected]' 'Grand'
使用高级REST客户端发送请求,甚至通过浏览器。所有变量和查询都未定义给我 - 'console.log(req.query,senderId,email,hotelName)'output:'[Function:getQuery] undefined undefined undefined' –
主要问题为什么它为你工作,为我工作?!与'resitfy'有冲突吗?我还会从'app.js'调用这段代码,如下所示:'var restApi = require(“./ rest_api”);' –
您可以发布代码来设置会话的Cookie位置吗? – pneedle
每当一个请求与查询制成,查询必须 存在的URL服务器识别他们。
以下是您的示例代码。您需要将查询添加到您的html表单中。您还可以使用&
将它们分开。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<form action="/as/?sender=321&[email protected]" method="post">
<input type="text" name="myName" value="">
<input type="submit" name="" value="ssss">
</form>
</body>
</html>
这里是app.js
app.post('/bookinghandler', function (req, res) {
var senderId = req.query.sender;
var email = req.query.email;
console.log('senderId = ' + senderId + ' email = ' + email);
res.end("got the info");
});
现在,你要问我这样做的目的,因为我们已经在形式定义它们。那么,真正的网站不这样做。如果你想评估你的查询,你需要离开他们空白并查看用户是否在浏览器上有任何cookie。
这是HTML表单
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<form action="/as/?sender=&email=" method="post">
<input type="text" name="myName" value="">
<input type="submit" name="" value="ssss">
</form>
</body>
</html>
这里是我们的应用程序
app.post('/bookinghandler', function (req, res) {
if(req.session.user.id){ //checking the cookies if the user is logged in/exists
var senderId = req.query.sender;
var email = req.query.email;
}else{
res.send("you haven't logged in");
return false;
}
console.log('senderId = ' + senderId + ' email = ' + email);
res.end("got the info");
});
为饼干节点模块的更多信息,请参阅here
结论
表单上的查询大多是额外的工作,只能使用req.body
和cookie,req.session
对象轻松完成工作。除非客户端和服务器之间有额外的数据传输,否则人们通常不会使用它。
UPDATE
,如果你想使用PARAMS
app.get('/bookinghandler/:myParam/?queriesHere='){
console.log(req.params.myParam + " and the query: " + req.query.queriesHere);
res.send(req.params.myParam + " and the query: " + req.query.queriesHere);
}
添加此代码,并复制到这个URL参数在node.js中
像这样定义/:param
localhost:5000/bookinghandler/hereisaparam/?queriesHere=123
m AKE一定要添加端口
如果它是一个服务器应用程序,创建另一个Node.js的文件,然后运行他们俩
otherfile.js
var request = require('request');
request('http://localhost:5000/bookinghandler/hereisaparam/?queriesHere=123', function (error, response, body) {
if(error){
console.log(error):
return false;
}
console.log('body:', body); // Print the data
});
运行这个文件服务器在运行时。
我没有从网站或其他任何地方发送查询:只是在浏览器或高级REST客户端的URL。 URL很简单:'localhost:5000/bookinghandler?sender = 100000250242810&email = some @ email.com&hotelName = Grand%20Hotel&confirmNumber = 654321&startDate = 2017-10-11&endDate = 2017-10-15' –
'req.url' is correct:'/ bookinghandler?sender = 100000250242810&email = some @ email.com&hotelName = Grand%20Hotel&confirmNumber = 654321&startDate = 2017-10-11&endDate = 2017-10-15'但是参数仍未定义。 –
这是因为你没有任何参数在这个网址@AlekseyKontsevich – turmuka
哼哼一般,如果你正在寻找的查询参数应该是一个GET方法没有? 'app.get(...)' –
@MarcoTalento,但可能GET也不适用于我 - 所有都是空的。 –
在进行更改时,是否记得重新启动服务器? – Boaz