#javascript #node.js #express #asynchronous #request
Вопрос:
Что я пытаюсь сделать: У меня есть приложение Node.js/Python, предназначенное для практики gRPC. Клиент узла предназначен для предоставления веб-интерфейса пользователям для ввода строки и номера. Исходя из этого, клиент передает эти аргументы серверу Python для обработки и возврата некоторой переменной.
Что я сделал: У меня связь между клиентом и сервером работает отлично, когда она реализована через интерфейс командной строки. У меня также есть служба интерфейса, которая отлично работает и в изоляции. Однако у меня возникают трудности с сочетанием обеих концепций.
Мой код:
// Frontend for web presentation
async function frontend(query){
const app = express();
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
app.set('view engine', 'pug');
app.get('/', (req, res) => {
res.render('index');
});
app.post("/submit", (req, res) => {
query.word = req.body.word;
query.mincount = req.body.mincount;
res.redirect('/');
return query;
});
app.listen(3000);
}
// Caller for gRPC
async function main(){
// ...
var func;
var query = {};
await frontend(query);
console.log(query);
// Some options for loading .proto file
const options = {
keepCase: true,
longs: String,
enums: String,
defaults: true,
oneofs: true,
};
// Load the .proto file
const packageDefinition = protoLoader.loadSync(PROTO_PATH, options);
// Load the proto package 'proto.keysearch' into variable
// This allows keysearchProto to recognize all of the definitions in the .proto file
const keysearchProto = grpc.loadPackageDefinition(packageDefinition).proto.keysearch;
// Create the client stub
// This allows us to call the 'Whohas' function defined in the 'KeywordSearch' service
// Additionally, send requests to port
const client = new keysearchProto.KeywordSearch(SOCKET, grpc.credentials.createInsecure());
// Finally, call the function
client[func](query, (err, response) => {
console.log(response.Results);
process.exit(0);
});
};
//frontend();
main();
Что происходит не так:
Из того, что я наблюдаю, происходит одно из двух. веб-интерфейс немедленно возвращает некоторые пустые значения для запроса, поскольку я предполагаю, что он прослушивает один раз, прежде чем какие-либо пользователи смогут взаимодействовать с веб-презентацией, захватывает запрос (пустой) и возвращается в main. Или main не ждет, пока интерфейс должным образом обработает то, что ему нужно, и продолжает обработку и пустой запрос.
Примечание: Я не уверен, как остановить интерфейс, чтобы дождаться завершения внутренних процессов. Поток, который я хотел бы, чтобы это произошло: запускается интерфейс -> пользователь вводит переменные в веб-формы — > > main затем использует эти значения для отправки в серверную часть — > > > после обработки серверная часть отправляет ответ в main — > > > > интерфейс распознает этот ответ и представляет новую информацию пользователю через другое веб-перенаправление.
Ответ №1:
Ну, вы можете использовать подсказку, вы можете это сделать
пусть Var1 = приглашение(«Текст приглашения здесь») это позволяет вам ввести приглашение.Что это делает, так это сохраняет информацию в переменной. Затем вы можете попросить что-нибудь взять эту информацию и использовать ее в другом месте. Если бы я создал веб-сайт для генерации случайного числа с вводом пользователем максимального значения, я мог бы сделать что-то вроде этого
function random(max) {
return Math.Floor(Math.Random() * max)
}
let userNumber = prompt("Enter max here")
console.log(random(userNumber));
Очевидно, вы бы сделали что-то другое, кроме консоли.лог, но концепция та же самая.