Node.js nodejs中带promise的导出函数
我正在尝试从一个包含承诺的外部文件导入一个函数。 承诺的解决方案是应该返回的,但我收到一条错误消息: 请求的模块“./functions.js”未提供名为“getOkapiToken”的导出 当我直接在服务器上运行POST请求时,它可以正常工作,但我需要将它放在一个单独的文件中,因为它将来将被几个不同的文件使用。 这也是我第一次使用promises,所以我不确定我是否正确处理了它(尽管在处理第一个问题之前,我无法注册任何错误) functions.js文件构建如下:Node.js nodejs中带promise的导出函数,node.js,function,import,promise,Node.js,Function,Import,Promise,我正在尝试从一个包含承诺的外部文件导入一个函数。 承诺的解决方案是应该返回的,但我收到一条错误消息: 请求的模块“./functions.js”未提供名为“getOkapiToken”的导出 当我直接在服务器上运行POST请求时,它可以正常工作,但我需要将它放在一个单独的文件中,因为它将来将被几个不同的文件使用。 这也是我第一次使用promises,所以我不确定我是否正确处理了它(尽管在处理第一个问题之前,我无法注册任何错误) functions.js文件构建如下: import post fr
import post from 'axios';
export function getOkapiToken(url, user, password) {
//Get username and password for API
const auth = {
"username": user,
"password": password
};
//Create headers for POST request
const options = {
method: 'post',
data: auth,
headers: {
'Content-Type': 'application/json',
'Content-Length': auth.length,
'X-Okapi-Tenant': 'diku'
}
};
//Make API post call
post(url+':9130/authn/login', options)
.then(response => {
return(response.headers['x-okapi-token'])
}).catch((err) => {
return(`There was an error 2: ${err}`)
})
}
import { getOkapiToken } from './functions3.js'
import settings from './jsons/config.json';
let OkapiKey = await new Promise((resolve,reject) => {
//Call function to make API post call
let keytoken = getOkapiToken(settings.url,settings.userauth,settings.passauth)
console.log(`There was an error: ${keytoken}`)
if (keytoken.length == 201) {
resolve(keytoken)
} else {
reject('There was an error')
}
})
OkapiKey.then((data) => {
console.log(data)
})
.catch((err) => {
console.error('I have an error:'+err.code);
})
我尝试按如下方式导入它:
import post from 'axios';
export function getOkapiToken(url, user, password) {
//Get username and password for API
const auth = {
"username": user,
"password": password
};
//Create headers for POST request
const options = {
method: 'post',
data: auth,
headers: {
'Content-Type': 'application/json',
'Content-Length': auth.length,
'X-Okapi-Tenant': 'diku'
}
};
//Make API post call
post(url+':9130/authn/login', options)
.then(response => {
return(response.headers['x-okapi-token'])
}).catch((err) => {
return(`There was an error 2: ${err}`)
})
}
import { getOkapiToken } from './functions3.js'
import settings from './jsons/config.json';
let OkapiKey = await new Promise((resolve,reject) => {
//Call function to make API post call
let keytoken = getOkapiToken(settings.url,settings.userauth,settings.passauth)
console.log(`There was an error: ${keytoken}`)
if (keytoken.length == 201) {
resolve(keytoken)
} else {
reject('There was an error')
}
})
OkapiKey.then((data) => {
console.log(data)
})
.catch((err) => {
console.error('I have an error:'+err.code);
})
在Javascript和wit Node.JS中有三种处理异步任务的方法
const { getOkapiToken } = require('./functions.js')
const settings = require('./settings.json')
var OkapiKey = getOkapiToken(settings.url,settings.userauth,settings.passauth)
OkapiKey
.then((data) => {
console.log('I have data'+ data.toString())
})
.catch((err) => {
console.error('I have an error:'+err.code);
})
functions.js
const post = require('axios');
const getOkapiToken = (url, user, password) =>
new Promise(function (resolve, reject) {
//Get username and password for API
const auth = {
"username": user,
"password": password
};
//Create headers for POST request
const options = {
method: 'post',
data: auth,
headers: {
'Content-Type': 'application/json',
'Content-Length': auth.length,
'X-Okapi-Tenant': 'diku'
}
};
post('http://localhost:3000/', options)
.then(response => {
resolve(response.data)
// if (response.headers['x-okapi-token']) {
// resolve(response.headers['x-okapi-token']);
// } else {
// reject((error));
// }
}).catch((err) => {
console.error('Response Error:'+err)
})
})
exports.getOkapiToken = getOkapiToken;
更改
模块。导出
为导出…
:@Marc谢谢!我不得不将整个导出更改为“export function”语法,但这似乎奏效了!结果仍然没有定义,但至少现在我得到了回应!你好,麦迪!谢谢你!有没有办法让function.js只包含一个函数,然后在index.js文件中调用承诺?我试图这样做,但收到一条错误消息:error[ERR_MODULE_NOT_FOUND]:找不到从C:\xampp\htdocs\NodeAPI\functions.jsp.s导入的包“axios”。当我尝试运行您编写的代码时,我也收到了错误消息:error[ERR_MODULE_NOT_FOUND]:找不到从C:\xampp\htdocs\NodeAPI\functions导入的包“axios”。jsAxios是承诺要解析或拒绝的异步代码。如果将axios移动到index.js文件,则为是。至于第二个回复mkae,请确保您安装了axios软件包。我通过您的方式获得了正确的响应。然后,我试图以此为基础,从函数文件中获得承诺,但是当我调用函数时得到的响应是“未定义的”(我甚至没有得到在catch中插入的错误消息)。我用自己编写的新代码更新了原来的帖子,但我找不到问题所在。既然我使用了OkapiKey.那么我就不需要使用“wait”对吗?为了使用wait,你必须使用一个异步函数。IDE应该抛出一个错误或警告,指示语法为invaild。下面是我模拟的几个示例,帮助您理解async并等待。