Node.js 生成可运行输出后服务器控制台上未定义
我在nodejs上创建了一个简单的html应用程序。下面是代码osserver.tsNode.js 生成可运行输出后服务器控制台上未定义,node.js,express,Node.js,Express,我在nodejs上创建了一个简单的html应用程序。下面是代码osserver.ts import express = require('express'); import http = require('http'); import path = require('path'); import cookieParser = require('cookie-parser'); export class Server { static startServer() { l
import express = require('express');
import http = require('http');
import path = require('path');
import cookieParser = require('cookie-parser');
export class Server {
static startServer() {
let app = express();
app.use(cookieParser());
app.use(express.static(__dirname + "/public"));
let server = http.createServer(app);
server.listen(7000, () => {
console.log('Up and running on port : ' + 7000);
});
}
}
exports.startServer = Server.startServer;
// Call a module's exported functions directly from the command line.
require('make-runnable');
我使用了make runnable
模块直接从命令行运行导出的函数。这是我在package.json中的start
脚本
"start": "concurrently \"tsc --watch \" \"nodemon server.js startServer\""
该应用程序工作正常,但这是在屏幕上打印未定义,这很烦人,这应该得到解决
[1] [nodemon] restarting due to changes...
[1] [nodemon] starting `node server.js startServer`
[1] Up and running on port : 7000
[1] --------make-runnable-output--------
[1] undefined
[1] ------------------------------------
[0] 4:08:52 PM - Compilation complete. Watching for file changes.
原因是什么?解决方案
通过导入“自定义”模块并为printOutputFrame
指定布尔值,使用make runnable
包可以清除输出帧。不要使用require('make-runnable')
,而是使用:
require('make-runnable/custom'))({
printOutputFrame:false
})
但是,这并不会删除“undefined”(或output)消息,因为make runnable
希望在解析承诺时记录一些返回值
相反,从函数中返回一些值,以便Bluebird(或使其可运行)自行打印:
static startServer() {
let app = express();
app.use(cookieParser());
app.use(express.static(__dirname + "/public"));
let server = http.createServer(app);
- server.listen(7000, () => {
- console.log('Up and running on port : ' + 7000);
- });
+ server.listen(7000)
+ return 'Up and running on port : ' + 7000;
}
注意:我还没有验证这是否不会导致服务器停止侦听,但这只是说明程序包对您的函数的期望
解释
*这是一个老问题,但我最近遇到了同样的问题,所以我想我应该提供一个解决方案
打印“undefined”的原因是它期望从您调用的函数中得到一些返回值。考虑这个函数的片段(我正在研究并运行这个问题):
generate:function(){
//…一些初步代码
fs.writeFile(文件,modifiedFileData,错误=>{
如果(错误)抛出错误
console.log('已成功生成应用程序密钥')
})
}
输出:
$node utils/EncryptionKey.js生成
--------生成可运行的输出--------
未定义
------------------------------------
已成功生成应用程序密钥。
在0.27秒内完成。
默认情况下,我只希望将该消息记录到控制台。如果没有make runnable
,它工作得很好,因为我最初只是运行这个函数,但想将其导出。查看make runnable
的源代码(engine.js),以下函数:
函数打印输出(返回值){
蓝鸟解析(返回值)
.then(函数(输出){
if(options.printOutputFrame){
log('--make runnable output-------');
}
控制台日志(输出);
if(options.printOutputFrame){
console.log('-------------------------------------');
}
}).catch(打印错误);
}
需要一些返回值,因为Bluebird将您正在执行的函数包装为承诺。我将初始代码改为:
generate:function(){
//…一些初步代码
fs.writeFile(文件,modifiedFileData,错误=>{
如果(错误)抛出错误
返回真值
})
返回“成功生成应用程序密钥”
}
并删除“未定义”值,并打印我的应用程序密钥消息
输出:
$node utils/EncryptionKey.js生成
已成功生成应用程序密钥。
在0.26秒内完成。
解决方案
通过导入“自定义”模块并为printOutputFrame
指定布尔值,使用make runnable
包可以清除输出帧。不要使用require('make-runnable')
,而是使用:
require('make-runnable/custom'))({
printOutputFrame:false
})
但是,这并不会删除“undefined”(或output)消息,因为make runnable
希望在解析承诺时记录一些返回值
相反,从函数中返回一些值,以便Bluebird(或使其可运行)自行打印:
static startServer() {
let app = express();
app.use(cookieParser());
app.use(express.static(__dirname + "/public"));
let server = http.createServer(app);
- server.listen(7000, () => {
- console.log('Up and running on port : ' + 7000);
- });
+ server.listen(7000)
+ return 'Up and running on port : ' + 7000;
}
注意:我还没有验证这是否不会导致服务器停止侦听,但这只是说明程序包对您的函数的期望
解释
*这是一个老问题,但我最近遇到了同样的问题,所以我想我应该提供一个解决方案
打印“undefined”的原因是它期望从您调用的函数中得到一些返回值。考虑这个函数的片段(我正在研究并运行这个问题):
generate:function(){
//…一些初步代码
fs.writeFile(文件,modifiedFileData,错误=>{
如果(错误)抛出错误
console.log('已成功生成应用程序密钥')
})
}
输出:
$node utils/EncryptionKey.js生成
--------生成可运行的输出--------
未定义
------------------------------------
已成功生成应用程序密钥。
在0.27秒内完成。
默认情况下,我只希望将该消息记录到控制台。如果没有make runnable
,它工作得很好,因为我最初只是运行这个函数,但想将其导出。查看make runnable
的源代码(engine.js),以下函数:
函数打印输出(返回值){
蓝鸟解析(返回值)
.then(函数(输出){
if(options.printOutputFrame){
log('--make runnable output-------');
}
控制台日志(输出);
if(options.printOutputFrame){
console.log('-------------------------------------');
}
}).catch(打印错误);
}
需要一些返回值,因为Bluebird将您正在执行的函数包装为承诺。我将初始代码改为:
generate:function(){
//…一些初步代码
fs.writeFile(文件,modifiedFileData,错误=>{
如果(错误)抛出错误
返回真值
})
返回“成功生成应用程序密钥”
}
并删除“未定义”值,并打印我的应用程序密钥消息
输出:
$node utils/EncryptionKey.js生成
应用程序密钥生成成功