尝试使用从 NodeJS 到本地主机的 Request NPM post 数据(Loopback Swagger API)
Trying to post data with Request NPM from NodeJS to localhost (Loopback Swagger API)
当我尝试 post 使用此代码从 nodejs 中环回的实例时,我没有收到任何错误,但我也没有收到任何数据 posted?
//NPM Package (request)
var request = require('request');
// Address of Loopback API on the same server
var api = "http://localhost:3000/api/devices";
//JSON Construction
var deviceInstance = {
"manufacturer": "manufacturer",
"model": "model"
//etc
}
// NPM (request)
request({
url: api,
method: "POST",
headers: {"Accept: application/json"},
json: true,
body: deviceInstance
}, function (error, response, body) {
if(error) {
console.log('error: '+ error);
} else {
console.log('document saved to api')
console.log(body);
console.log(response);
}
});
process.exit();
我没有从同一台机器的服务器收到任何响应或错误。如果我在 postman(windows 应用程序)中尝试相同的调用,它实际上会在 API 中创建一个实例,那么为什么我的本地节点没有连接到 API?
request
需要回调 :
request({
url: api + "Devices",
method: "POST",
headers: "Accept: application/json",
json: true,
body: JSONParent
}, (err, result, body) => {
// do your stuffs with the results
});
为什么 process.exit() ?
调用 process.exit() 将强制进程尽快退出,即使仍有未决的异步操作。
发生了什么以及为什么
您看到的行为是由于 异步 性质 Javascript。
您的代码,从上到下,启动 POST 请求,然后在请求完成之前调用 process.exit()
,这给出了行为您正在查看 "breaks" 您的代码。
从那里你有两个解决方案:
在请求的回调中调用process.exit()
//NPM Package (request)
var request = require('request');
// Address of Loopback API on the same server
var api = "http://localhost:3000/api/devices";
//JSON Construction
var deviceInstance = {
"manufacturer": "manufacturer",
"model": "model"
//etc
}
// NPM (request)
request({
url: api,
method: "POST",
headers: {"Accept: application/json"},
json: true,
body: deviceInstance
}, function (error, response, body) {
if(error) {
console.log('error: '+ error);
} else {
console.log('document saved to api')
console.log(body);
console.log(response);
}
//request is done, we can safely exit
process.exit();
});
在 request
的回调中调用 exit()
函数将有效地确保 POST 请求已完成并且您可以安全退出。
完全删除 process.exit()
事实是,您不需要手动退出:一旦 事件循环 为空,任何 Node 进程都会自行退出。换句话说,一旦没有为该进程安排进一步的任务,节点将自行退出该进程。
您可以在官方文档中找到更多相关信息:https://nodejs.org/api/process.html#process_event_exit
当我尝试 post 使用此代码从 nodejs 中环回的实例时,我没有收到任何错误,但我也没有收到任何数据 posted?
//NPM Package (request)
var request = require('request');
// Address of Loopback API on the same server
var api = "http://localhost:3000/api/devices";
//JSON Construction
var deviceInstance = {
"manufacturer": "manufacturer",
"model": "model"
//etc
}
// NPM (request)
request({
url: api,
method: "POST",
headers: {"Accept: application/json"},
json: true,
body: deviceInstance
}, function (error, response, body) {
if(error) {
console.log('error: '+ error);
} else {
console.log('document saved to api')
console.log(body);
console.log(response);
}
});
process.exit();
我没有从同一台机器的服务器收到任何响应或错误。如果我在 postman(windows 应用程序)中尝试相同的调用,它实际上会在 API 中创建一个实例,那么为什么我的本地节点没有连接到 API?
request
需要回调 :
request({
url: api + "Devices",
method: "POST",
headers: "Accept: application/json",
json: true,
body: JSONParent
}, (err, result, body) => {
// do your stuffs with the results
});
为什么 process.exit() ?
调用 process.exit() 将强制进程尽快退出,即使仍有未决的异步操作。
发生了什么以及为什么
您看到的行为是由于 异步 性质 Javascript。
您的代码,从上到下,启动 POST 请求,然后在请求完成之前调用 process.exit()
,这给出了行为您正在查看 "breaks" 您的代码。
从那里你有两个解决方案:
在请求的回调中调用process.exit()
//NPM Package (request)
var request = require('request');
// Address of Loopback API on the same server
var api = "http://localhost:3000/api/devices";
//JSON Construction
var deviceInstance = {
"manufacturer": "manufacturer",
"model": "model"
//etc
}
// NPM (request)
request({
url: api,
method: "POST",
headers: {"Accept: application/json"},
json: true,
body: deviceInstance
}, function (error, response, body) {
if(error) {
console.log('error: '+ error);
} else {
console.log('document saved to api')
console.log(body);
console.log(response);
}
//request is done, we can safely exit
process.exit();
});
在 request
的回调中调用 exit()
函数将有效地确保 POST 请求已完成并且您可以安全退出。
完全删除 process.exit()
事实是,您不需要手动退出:一旦 事件循环 为空,任何 Node 进程都会自行退出。换句话说,一旦没有为该进程安排进一步的任务,节点将自行退出该进程。
您可以在官方文档中找到更多相关信息:https://nodejs.org/api/process.html#process_event_exit